Egy különös domain migráció és játék a .htaccess fájlokkal
Ebben a cikkben
Ez egy olyan domain migrációról szóló cikk, ami tényleg mélyen szakmai. Ráadásul elég egyedi esetet dolgoz fel, amivel nagyjából aligha fog találkozni bárki. Nekem is ez volt az első ilyen esetem, és az is lehet, hogy az utolsó is. Na, ha ennek ellenére is érdekel a cikk, akkor olvass tovább.
A háttér
Egyszerű migrációnak indult, de aztán kiderült, hogy nem lesz olyan sima ügy. Az ügyfél ez esetben teljesen mindegy, a domaint se fogom publikussá tenni, mert nem lényeges. De az adatokat megtartom „identikusan”, hogy jól érhető legyen a teljes folyamat.
Adott volt egy régi .hu-s domain. Ahonnan már évekkel ezelőtt átköltöztették az oldalt a .com-ra. Aztán most megújult a .com oldal. És itt csatlakoztam be én a folyamatba. Csak menet közben kiderült, hogy anno nem minden lett 100% pontosan megcsinálva. De nyilván ezekre menet közben derült fény. Így napról napra, vagyis pontosabban óráról órára derültek ki mókás dolgok, amiket meg kellett oldani.
Kicsit olyan volt a helyzet, mint amikor belefogsz egy házfelújításba, kijön egy szaki és csak nézi, hogy „hát ez meg mi?” vagy „értem, hogy működik, de ilyet azért nem szokás csinálni”.
A példa kedvéért nevezzük el a dolgokat:
- a régi domain legyen brand123.hu
- az új domain meg brand44.com.
Sok évvel ezelőtt brand123.hu-ról átmozgatták az oldalt brand44.com-ra. Valahogy.
Most pedig brand44.com megújult. Így az én feltételezésem az volt, hogy itt csak egy brand44.com migráció lesz brand44.com-ra. De kiderült, hogy nem egészen. Vagyis nem csak erre lesz szükség.
Mi okozta a fő problémát?
- egyrészt csak 1 tárhellyel rendelkeztek, és az egész a brand123.hu alatt fut
- és ide volt egy külön folderbe berakva a brand44.com
- a brand123.hu domainről pedig csak egy alap átirányítás volt a brand44.com-ra
Egészen pontosan így.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^brand123\.hu$ [NC]
RewriteRule ^(.*)$ https://brand44.com [R=301,L]
A fő gond itt az, hogy minden régi .hu domain az új főoldalra ment át. Vagyis „kezelve lett” minden átirányítás technikailag. De az új oldal root domainre mentek ezek.
Mivel a feladat nekem az volt, hogy a brand44.com-ot nézzük át és migráljuk ugyanúgy brand44.com-ra, csak a megújult tartalomra, ezért nyilván fel se merült, hogy a brand123.hu-val bármit is csinálni kéne.
De mikor kiderült, hogy igen, akkor jöttek elő az újabb gondok.
A .hu oldalhoz ugyanis nem volt Search Console hozzáférés, ezért ezt be kellett kötni. Ugyanis évek óta ott van a Google indexben rengeteg brand123.hu tartalom, és hát ezeket a brand44.com Search Console-ja nem látja (mert ezek a brand123.hu-ba gyűlnek) és az Analytics is félrekönyveli attribúcióban. Nem kifejezetten SEO / migráció feladat, de én ezeket szeretem megcsinálni. És olyan állapotokat magam mögött hagyni, hogyha jön a következő mester, akkor azt mondja, hogy „nah, ezt az előttem lévő szaki normálisan megcsinálta”.
Property hitelesítés
A gond? A .hu domainen ugyebár nincs weboldal, csak egy .htaccess file, ezért se a HTML címke, se az Analytics alapú hitelesítés nem működik. Marad két opció:
- DNS alapon
- HTML fájllal a szerveren
Jött az újabb probléma. Ennél a tárhely szolgáltatónál nem lehet txt recordot felvinni. Ne kérdezd miért. Vagy csak nekem nem sikerült hosszas keresgélés után se megtalálni CPanelben, vagy tényleg nem lehet.
Így maradt a HTML fájl feltöltési lehetőség. Igen, ám, de ugyebár itt meg minden URL-t egyből átirányít a .htaccess. Így a szerverre felrakott hitelesítő HTML filet se tudta a rendszer beolvasni a brand123.hu-n. Mondván az oldal átirányít egy másik helyre, a brand44.com-ra. Ami igaz is.
Úgyhogy „Ownership verification failed”.
Jött a következő trükk. Először hozzá kellett adni egy feltételt a .htaccesshez, hogy az adott URL-t hagyja figyelmen kívül. Tehát legalább azt engedje a szerveren betölteni. Így jött létre ez:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/google5fbaab72ea53234eradc23422.html?$
RewriteCond %{HTTP_HOST} ^brand123\.hu$ [NC]
RewriteRule ^(.*)$ https://brand44.com [R=301,L]
Így a hitelesítő HTML betöltött és sikerült hitelesíteni a Search Console-t.
Ezzel pedig már kérvényezhető is lett az oldal átmozgatása (Change of address).
Rövid validálás következett.
Majd a mozgatás jóváhagyása.
És végül megjött a sikeres mozgatásról szóló visszaigazolás.
Így most részben joggal várható, hogy a Google szépen idővel elkezdi kitakarítani a brand123.hu találatokat az indexéből.
Redirectek és 404-ek
Aztán persze menet közben azon gondolkoztam, hogy persze a brand123.hu minden tartalma ugyan átment még anno a brand44.com-ra, de mivel csak a főoldalra, ezért lehet ezt kulturáltabban kéne kezelni. Ha jön a következő mester, akkor patika állapotot találjon maga mögött.
Erre több opció is rendelkezésre áll.
- veszem az összes régi brand123.hu URL-t Wayback Machine és Search Console segítségével, amiről itt írtam bővebben és egyesével párosítom a régi és új URL-eket, aztán a brand123.hu-nál kezelem .htaccessben az összes cross domain átirányítást brand44.com-ra
- vagy fogom és minden URL-t átdobok egyező URL sluggal a brand123.hu-ról a brand44.com-ra és ott kezelem le az átirányításokat
Mind a kettőnek megvan az előnye és a hátránya.
Egy elég egyszerű ok miatt maradt a 2. opció. Mert így ha egy URL 404-et dobna a brand123.hu-n, akkor azt látni lehet a brand44.com CMS-ében és Search Consoleban is. És ott lokálisan lehet kezelni ezeket. Azért mégiscsak gyakrabban megy fel egy ügyfél is a saját CMS-ébe, mint mondjuk egy használaton kívüli domain Search Console-jába vagy az error log fájljai közé. Ezeken a helyeken még én se nagyon szoktam járni. Így nem várható el, hogy valaki képben legyen ezzel ügyfél oldalon. Vagy bármilyen későbbi fejlesztő, SEO szakértő stb.
Így a brand123.hu .htaccesst végül módosítottam erre.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/google5fbaab72ea53234eradc23422.html?$
RewriteCond %{HTTP_HOST} ^brand123\.hu$ [NC]
RewriteRule ^(.*)$ https://brand44.com/$1 [R=301,L]
Azaz a korábbi ebből:
RewriteRule ^(.*)$ https://brand44.com [R=301,L]
Lett ez:
RewriteRule ^(.*)$ https://brand44.com/$1 [R=301,L]
Összesen 3 karakter (/$1), de mekkora különbséget jelent!
Ezzel azt sikerült elérni, hogy minden régi .hu-s url megkapta egy az egyben azt az URL slugot a .com domainen.
Ami régen brand123.hu/kontakt volt, az most brand44.com/kontakt lett.
- Ha létezik ilyen .com URL, akkor király. Nem kell tenni semmit.
- Ha nem létezik, akkor meg a brand44.com/kontakt-ot át kell irányítani mondjuk a brand44.com/kapcsolat-ra
Vagyis így már a brand44.com .htaccessben tudom kezelni az átirányításokat. Vagy nyilván valamilyen redirect managerben, WordPress esetén egy Redirection pluginban vagy egy Yoast plugin prémium csomagjában.
Itt is számos előny és hátrány van, hogy ki mikor használ .htaccess-t vagy valamilyen redirect managert.
Azokban az esetekben, amikor sok embernek van hozzáférése a CMS-hez, nem is biztos, hogy mindenki mindent ért a beállításokban és jobb szeretem a .htaccess fájlt használni. Mert itt csökkenthető a „user error” esélye, vagyis nem visznek fel felesleges vagy törölnek szükséges átirányításokat.
Újabb probléma
És amikor azt hittem volna, hogy a probléma megoldódott, a szerver dobott még egy érdekes hibát.
Ha olyan URL-eket irányítottam át, ami mappa-mappája volt, akkor teljesen fura dolgot művelt. Egész egyszerűen törölte a köztes mappát és 404 hiba URL-eket generált. Itt egy példa!
Kezeltem két URL-t átirányítással .htaccessben:
- brand44.com/mappa/
- brand44.com/mappa/url/
Az alábbi két paranccsal ebben a sorrendben:
- Redirect 301 /mappa/ https://brand44.com/
- Redirect 301 /mappa/url/ https://brand44.com/
De a szerver az első parancs miatt a 2. parancsból kigyomlálta a /mappa/-t és létrehozta a brand44.com/url/ URL-t, ami nem létezik. Soha nem is létezett. Ezért 404 hibaoldal jött létre, hiába van megadva a helyes átirányítás .htaccessben.
Most vagy én nem jöttem rá valami teljesen evidens okra (simán elképzelhető), vagy a szervernél van valami borzasztóan csúnyán elállítva.
Sebaj, mivel minden hosszú URL természetesen hosszabb mint a rövid, ezért csak a .htaccessben kell az átirányítások sorrendjét módosítani. Így ha a sorrend fordított:
- Redirect 301 /mappa/url/ https://brand44.com/
- Redirect 301 /mappa/ https://brand44.com/
Akkor előbb fut le a hosszú URL átírányítás, nem tudja kigyomlálni belőle a /mappa/-t és nyert ügyem van. Ezért:
- Elővettem minden URL-t
- Beraktam őket soronként Excelbe
- megszámoltam hogy melyik cella hány karakterből áll (=HOSSZ() függvénnyel)
- majd csökkenő sorba raktam az átirányítás sorait karakterszám alapján
Utána pedig ebben a sorrendben raktam fel a .htaccessbe a redirecteket. Hosszúak előre, rövidek hátra. Mint anno általánosban tornaórán Kungler Sanyi bácsinál.
Ezzel garantáltam, hogy minden almappa fentebb legyen a sorban mint a főmappa. Így már nem tudta a szerver felülírni a parancsokat.
Problem solved. Migráció kész.
Tetszett a cikk? Szeretnél még több ilyet olvasni?
Akkor iratkozz fel és küldünk egy emailt, ha hasonló cikket írunk!
Hozzászólások
Moderáld magad – vagy mi fogunk. :)
Na jó, nem fogunk, szóval csak ésszel!