Tartalom
Bevezető
A Drupal egy nyílt forráskódú, ingyenes CMS (tartalomkezelő) rendszer, amivel sokféle weboldal építhető, például ez az oldal is ezzel készült. Sok funkcióval rendelkezik, többek között támogatja a SEO URL-ek kezelését is, ami köztudottan előnyös a keresők szempontjából.
Körülbelül másfél évvel ezelőtt vettem észre ezen az oldalon egy apó hibát, ami ezeket a SEO URL-eket érintette. Akkor keresgélnem kellett rá a megoldást, majd javítottam is a problémát. Aztán mostanában újra előjött ez a jelenség, illetve csak most vettem észre. Valószínű, valamelyik alaprendszer frissítés során írhattam felül véletlenül a korábban módosított fájlokat a "gyári" fájlokkal, így újra el kellett végeznem ezeket a módosításokat. Szerencsére a korábbi jegyzeteim segítségével most töredéke idő alatt sikerült megoldani, így hát gondoltam készítek róla egy rövid kis írást, hátha másnak is jól jön, valamint nekem is jobban kéznél lesz ha újra be kell állítanom.
Ebben a rövid hibaelhárítóban tehát megnézzük, hogy hogyan orvosolhatjuk az oldalaink URL címében lévő felesleges index.php részeket.
A hibajelenség
Amikor lépkedünk a Drupal alapú weboldalon, egyszer csak feltűnik hogy a címsorban megjelenik az "index.php" rész az aloldalra hivatkozó kérés elején. Néhány példa erről az oldalról:
https://www.linuxportal.info/index.php/ https://www.linuxportal.info/index.php/leirasok https://www.linuxportal.info/index.php/cikkek https://www.linuxportal.info/index.php/leirasok/web-hoszting https://www.linuxportal.info/index.php/enciklopedia
(Direkt nem linkeltem be ezeket az url címeket, hogy a keresők ne kapjanak feleslegesen rossz címeket, valamint, mire kikerül ez az írás, addigra már a hiba javításra kerül, így amúgy is visszaugranak a helyes URL változatokra.)
A dolog további érdekessége, hogy ha a címsorban kitöröljük az "index.php/" részt, akkor anélkül is bejönnek az oldalak, tehát ahogy rendesen működnie kéne. De az oldalon rákattintva bármilyen belső linkre a következő oldal URL címe már ismét tartalmazza ezt a nem kívánatos "index.php/" részt.
A probléma
Egyrészt idegesítő a dolog, mert ha már SEO URL-ekről beszélünk, akkor azokban nincs helye semmilyen php fájloknak, sem egyéb paramétereknek, másfelől pedig komolyabb bajt is okoz: A keresőmotorok, így például ha a Google is rátalál ezekre a hibás URL címekre, akkor elkezdi beindexelni őket, ami több problémát is felvet:
- Új URL címek keletkeznek a Google indexében, amik SEO szempontból előröl kezdik a pályafutásukat, mivel újak, így nincsenek rámutató külső linkek, nincs még SEO értékük, stb...
- Mivel az oldalak működnek a feleslegesen bent lévő index.php részekkel is, és anélkül is, így duplikált tartalom jön létre a Google indexében, ami pedig szintén nem tesz jót a rangsorolásnak.
Mindez frissen például ennek az oldalnak a mai Apache naplójában megtekintve:
Itt a parancsban először leszűrtem a "66.249" -et tartalmazó IP-címeket, amik közismerten a Google keresőrobotjainak címtartományából való címek, majd az "index.php"-re is rászűrtem, hogy csak ezeket mutassa, valamint a jelenlegi példa kedvéért vettem az első 20 sort, amik még a javítás előtti állapotban történtek a hajnali órákban.
Ami itt jól látszik, hogy a lekérések mind az "index.php/" résszel kezdődnek, és hogy a szerver a 200-as válaszkódokat adta, azaz gond nélkül visszaadta az oldal tartalmát a lekérőnek.
Tehát ez itt a probléma ilyenkor, hogy a Google is elkezdi "bedarálni" ezeket a helytelen URL címeket, így ha nem vesszük észre időben, akkor sok URL-t térképez fel, és eléggé romolhatnak a helyezéseink a keresőkben.
Hogyan hozhatjuk mindezt helyre?
A megoldás
A megoldás nem is olyan bonyolult, mint elsőre gondolnánk, mindössze két fájlt kell módosítanunk a webgyökérben.
A .htaccess fájl módosítása
A .htaccess fájlok segítségével lehet helyileg szabályozni az adott könyvtárban vagy könyvtárstruktúrában az Apache működését a meghatározott kereteken belül.
Először tehát nyissuk meg kedvenc szerkesztőnkkel a weboldal gyökér könyvtárában lévő .htaccess fájlt:
nano .htaccess
Majd tegyük rögtön a legelejére az alábbi részt és mentsük is le:
<IfModule mod_rewrite.c> RewriteEngine on # "index.php/" résszel kezdődő URL-ek "visszaterelése" 301-el a helyes címre: RewriteRule ^index.php/$ / [R=301,L] RewriteRule ^index.php/(.*) /$1 [R=301,L] </IfModule>
Itt annyi történik, hogy egy Apache direktívában ellenőrizzük, hogy be van-e töltve a rewrite Apache modul, ami az átirányításokért felelős, majd bekapcsoljuk az átirányító rendszert, és egy 301-es ("véglegesen elköltözött") állapotkóddal átirányítunk minden olyan kérést, ami "index.php/" -val kezdődik, az e nélküli URL változatra. A rewrite szabály végén lévő "L" zászló pedig gondoskodik róla, hogy ehhez a lekéréshez már ne hajtson végre további rewrite szabályokat az Apache, amennyiben még lennének például a .htaccess további részeiben.
Igazából itt csak formaiságból csomagoljuk az egészet egy ellenőrző direktívába, hogy szabályosak legyünk, mivel ha már működik egy Drupal rendszer a szerveren, akkor biztosan rendelkezésre áll ez a modul.
Ezzel meggátoljuk, hogy a továbbiakban belekerüljenek az "index.php/" részek az URL címeinkbe.
Ezután nem árt még frissíteni az oldal cache tárolóját is, mert maradhattak bent hibás URL-ek. Ezt az admin menüből is elvégezhetjük, vagy ha használunk drush-t, akkor az alábbi paranccsal:
drush cr
A robots.txt fájl módosítása
A webgyökérben elhelyezett robots.txt fájl az egy a robotoknak szóló fájl, amikben különböző direktívákat, szabályokat helyezhetünk el, amikkel utasíthatjuk a keresőrobotokat a számunkra megfelelő viselkedésre. Azonban sok robot ezt a fájlt figyelmen kívül hagyja, sokszor ezeket a robotokat "rossz robotoknak" is szokták nevezni. Szerencsére a Google robotjai nem tartoznak ezek közé – amik most nekünk a fontosak –, hanem ezek szabályosan figyelembe veszik a robots.txt fájlt. Így tehát most nyissuk meg szerkesztésre ezt a fájlt is:
nano robots.txt
Ennek a végébe pedig tegyük bele az alábbi egyetlen sort és mentsük is le:
Disallow: /index.php/*
Vagy ha szimpatikusabb, akkor egyetlen paranccsal is hozzáfűzhetjük:
echo "Disallow: /index.php/*" >> robots.txt
Ezzel a sorral pedig arra utasítjuk a robotokat (már amelyik figyelembe veszi), hogy a "/index.php/" résszel kezdődő URL címeket ne indexeljék.
Ezzel pedig "visszamenőleg" is korrigáljuk a hibát, azaz a már beindexelt hibás URL címeket így kivetetjük a keresők indexeiből. Ez persze egy hosszabb folyamat, aminek a megvalósulási ideje sok tényezőtől is függ, például, hogy milyen gyakran járnak a robotok az oldalunkon, stb.
Az eredmény
Ténykedésünk gyümölcsét könnyen ellenőrizhetjük, ha újra benézünk az Apache log fájljába, csak most ebben a példában az első 20 sor helyett az utolsó 20 sort nézzük meg, amik már a hiba elhárítása után keletkeztek:
Itt is láthatjuk, hogy még most frissen is járják a Google robotjai a hibás – index.php-t tartalmazó – URL címeket, viszont most már nem a korábbi 200-as válaszkódot adja az Apache a tartalommal, hanem 301-es válaszkódokat ad vissza.
Ha pedig jobban "kibontogatjuk" ezeket a sorokat a grep "-C" opciójával, akkor láthatunk még a találatok előtt és után 1-1 plusz sort, így láthatjuk, hogy mi történik az adott lekérés után. Valamint a végére még egyszer betettem az index.php szűrését, így most kiemeli színessel, így jobban áttekinthető:
Itt már szebben látszik, hogy a pirossal kiemelt index.php-s sorok lekéréseiben 301-es válaszkódot ad vissza, majd utána érkezik ugyanannak az URL-nek az index.php nélküli változatára, ami már a helyes, 200-as válaszkódot adja, valamint magát a tartalmat is.
Így tehát a Google szépen apránként korrigálja az indexében a hibásan bekerült URL címeinket.
A leírás elején mutatott hibás linkekkel ki is próbálhatjuk a működést.
Konklúzió
Szerencsére időben vettem észre ezt a problémát, még nem tapasztaltam keresési visszaesést, minden esetre az alaprendszer frissítéseknél oda kell figyelni, hogy ha felülírjuk a friss .htaccess és robots.txt fájlokkal a régieket, akkor ne felejtsük el pótolni a korábbi módosításainkat, hogy ne járjunk így.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 61 megtekintés