Sivuston siirrot: SEO-myyttien tuhoaminen

Asiakkaallani on WordPress-sivusto, jota isännöi CPanel Linux -palvelin.

Heidän vanha URL on https://old-example.co.uk. Heidän uusi URL on https://new-example.co.uk.

Molemmat URL-osoitteet viittaavat samaan A-tietueeseen ja ne on lisätty verkkotunnuksen aliaksiksi CPanelin kautta.

Kaikki tietokannan URL-osoitteet on korvattu seuraavilla: https://new-example.co.uk Interconnectin Etsi ja korvaa -työkalun avulla. wp-config.php on myös päivitetty vastaamaan uutta URL-osoitetta.

Yritimme sitten tätä kautta .htaccess:

#Force SSL  RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://new-example.co.uk/$1 [R,L]  # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Yllä olevalla koodilla, kun vierailet https://old-example.co.uk suoraan selaimen kautta, johon se ohjaa https://new-example.co.uk täydellisesti.

Kuitenkin, kun napsautat vanhaa linkkiä SERP: ien kautta, esim. https://old-example.co.uk/about, vanha URL-osoite jää selaimen osoiteriville.

Haluamme, että uusi URL-osoite näkyy aina selainten osoiterivillä. Tämän saavuttamiseksi yritimme säätää .htaccess niin kuin:

#Redirect old domain  RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !new-example.co.uk$ [NC] RewriteRule ^(.*)$ https://new-example.co.uk/$1 [L,R=301]  #Force SSL  RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://new-example.co.uk/$1 [R,L]  # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Tämä ei toimi ja joidenkin kuvien ja tyylitaulukoiden lataaminen epäonnistuu.

Missä olemme menossa pieleen täällä?

  • Epäilen suuresti sitä, että uudelleenohjaukset perustuvat viittaimeen, kuten näytät ehdottavan. Todennäköisempää on, että testaus tapahtuu eri tavalla, koska selaimesi on tallentanut uudelleenohjauksen välimuistiin. Kun testaat, sinun on tyhjennettävä selaimen välimuisti joka kerta tai testattava komentorivillä käpristämällä.
  • Kyllä, "tämä sääntö" varmasti "rikkoo sivustosi" - se johtaa uudelleenohjaussilmukkaan (ellei A, niin B, jos ei A, sitten B jne.) "Force SSL" -direktiivisi on väärässä paikassa ja voitti älä tee mitään. Mitä tapahtuu, kun vierailet https://old-example.co.uk/about "suoraan"? Kuten @Stephen ehdottaa, URL-osoitteen kirjoittamisen suoraan selaimeen ja URL-osoitteen napsauttamisen SERP-tiedostoissa ei pitäisi olla eroa. "Yllä olevalla koodilla, kun käyt https://old-example.co.uk suoraan, se ohjaa uudelleen https://new-example.co.uk täydellisesti. "- yllä oleva koodi ei tee sitä (luultavasti itse WP).
  • @StephenOstermiller kaikki testit suoritetaan yksityisessä selauksessa välimuisti tyhjennettynä.
  • @MrWhite Voitteko suositella oikeaa direktiiviä SSL: n pakottamiseksi? Kun käyt suoraan osoitteessa old-example.co.uk/about, URL-osoite pysyy selainpalkissa eikä muutu muotoon new-example.co.uk/about. Tämä on sama käyttäytyminen SERP: istä.
  • 1 MrWhite sanoo, että www on sovitettava yhteen RewriteCond ja RewriteRule Heillä pitäisi olla joko molemmat www tai molemmat eivät. Tämän uudelleenkirjoitussäännön ja pakotetun SSL-säännön on oltava ennen WordPressin uudelleenkirjoitussääntöjä.

Yllä olevalla koodilla, kun vierailet https://old-example.co.uk suoraan selaimen kautta, johon se ohjaa https://new-example.co.uk täydellisesti.

"Yllä oleva koodi" ei todellakaan tee sitä. Ainoa uudelleenohjaus kohdassa "yllä oleva koodi" on HTTP: n uudelleenohjaus HTTPS: ään (vain). Joten se ohjata uudelleen http://old-example.co.uk (ei https) https://new-example.co.uk. Joten, jos näkisit tämän uudelleenohjauksen silloin jotain muuta oli tekemässä sitä, ehkä WordPress itse tai jopa välimuistissa oleva uudelleenohjaus?

... joidenkin kuvien ja tyylitaulukoiden lataaminen epäonnistuu.

Mitä tarkoitat tarkalleen sanalla "jonkin verran kuvia ja tyylitaulukoita "? jonkin verran kuvat ja tyylitaulukot latautuvat oikein? Mitä eroa on kuvissa ja tyylitaulukoissa, jotka eivät lataudu?

Kuvia ja tyylitaulukoita ei pidä muutenkaan ohjata uudelleen. Nämä on jo linkitettävä oikein HTML-koodissa. (?)

Päivitetty koodi sisältää kuitenkin virheen (tosin ei virheen, joka välttämättä korjata "joitain" kuvia ja tyylitaulukoita), ja sitä voidaan varmasti yksinkertaistaa ...

#Redirect old domain  RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !new-example.co.uk$ [NC] RewriteRule ^(.*)$ https://new-example.co.uk/$1 [L,R=301]  #Force SSL  RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://new-example.co.uk/$1 [R,L]  

"Virhe" on ensimmäisessä RewriteCond direktiivi:

RewriteCond %{HTTP_HOST} !new-example.co.uk$ [NC] 

Sinulta puuttuu merkkijonon alkuankkuri CondPattern, joten tämä ehto onnistuu, kun isäntä ei päättyy new-example.co.uk, joten se ei kanonisoi pyyntöä www.new-example.co.uk (www-aliverkkotunnus), koska tämäkin loppuu new-example.co.uk.

Yllä oleva tulisi kirjoittaa uudestaan:

# Redirect old domain RewriteCond %{HTTP_HOST} !^new-example\.co\.uk$ RewriteRule (.*) https://new-example.co.uk/$1 [R=301,L] # Force SSL RewriteCond %{SERVER_PORT} 80 RewriteRule (.*) https://new-example.co.uk/$1 [R=301,L] 

Huomautuksia yllä mainituista:

  • Kuten edellä keskusteltiin, merkkijonoankkurin alku (^) on lisätty CondPattern: !^new-example\.co\.uk$ - huomioi myös pakenevat pisteet, muuten ne vastaavat mitä tahansa merkkiä.

  • Ei tarvetta kääreitä. (Katso vastaukseni tähän viimeaikaiseen kysymykseen: Onko mod_write-tarkistaminen todella välttämätöntä?)

  • Ei tarvetta ylimääräisille RewriteEngine ja RewriteBase direktiivejä. Nämä on jo mainittu WordPress-koodilohkossa. Myöhemmin tiedostossa (WP-lohkossa) määritetyt direktiivit ohittavat joka tapauksessa aikaisemmat direktiivit.
  • Poisti NC lippu kumottu kunto. (Huomaa, että se on a kumottu Koska haluat, että se onnistuu, kun se ei onnistu new-example.co.uk vain kaikki pienet kirjaimet. Jos sisällytät NC lippu sitten se ei vastaa väärin muotoiltuja pyyntöjä kuten NEW-EXAMPLE.CO.UK.
  • "Force SSL" -ohjauksen pitäisi viime kädessä olla myös 301. Toteamalla vain R sitten se oletusarvoisesti väliaikainen 302-uudelleenohjaus. (Vaikka on hyvä testata 302 uudelleenohjauksella selaimen välimuistin välttämiseksi.)
  • Muutin RewriteRule kuvio alkaen ^(.*)$ että (.*) - nämä kaksi regexiä ovat olennaisesti samat, koska * On ahne oletuksena. (.*) on lyhyempi / yksinkertaisempi, joten se on yleensä edullinen. Jotkut ihmiset kuitenkin haluavat silti sisällyttää alku- / loppuankkurit, koska heidän on helpompi lukea.
  • 1 Kiitos niin yksityiskohtaisesta, hyvin selitetystä vastauksesta. Minulla on nyt paljon parempi (ja puhtaampi) käsitys siitä, miten tämä kaikki toimii. Uusi koodisi toimii täydellisesti.

työskennellyt sinulle: Charles Robertson | Haluatko yhteyttä?