Ajax és a SEO – Avagy ellenségből barát
Ebben a postomban Verő Boglárka és David Walsh irományát párosítom össze, a magam szájíze szerint.
A kiindulási koncepció ugye az, hogy egy normális tartalmat a kereső robotok minden gond nélkül látják, és fel is tudnak dolgozni. Viszont mi van abban esetben, ha lapunk tele van AJAX kérésekkel? Gondolom sokan tudjátok, hogy a keresők nagy száma nem is törődik a javascriptekkel. Gyakorlatilag figyelmen kívül hagyja, észre sem veszi. Nem hogy lefuttassa őket. (De ebbe most bővebben nem mennék bele részletesebben, mert a Google néhány speciális esetben képes javascriptbe-be ágyazott linkek követésére. Állításom forrása megtalálható Longhard egyik cikkében.) Tehát azon lapok, vagy postok, hozzászólások, vagy képek de végül is legyen bármi, ami AJAX-al töltődik be a botok számára nem is léteznek. De mit tudunk olyan esetben tenni, ha nekünk mégis szükségünk van arra hogy az így betöltött tartalom is elérhető legyen a keresők, és robotok számára? Nem kell hosszasan gondolkozni! Csak nem a beidegződéseket kell követni, hanem kicsit robot fejjel gondolkodni.
Egy hagyományos AJAX request, melyet nem tud értelmezni a keresőrobot:
<a href="javascript:q(2);"> További hozzászólások megmutatása </a>
És ennek módosítása mellyel már elboldogul:
<a onclick="javascript:q(2); return false;" href="forum.php?q=2"> További hozzászólások megmutatása </a>
Elemezzük is ki, mi ennek az oka. Mint mondottam, a javascriptet figyelmen kívül hagyják. De a második esetben, a href tagot tudja követni a robot, mert az egy számára is értelmezhető url, mely indexelhető tartalmat fog neki adni. De a felhasználó is megkapja a neki szánt élményt, mert at onclick esemény lefut, így meghívódik az AJAX request, de a return false biztosítja majd számunkra, hogy a "normális link" ne működjön. Különben ezzel a megoldással két legyet üt egyszerre a webmester mert nem csak a kereső számára lesz olvasható a tartalom, hanem azon látogatóknak is, akiknek nincs, vagy éppen letiltották a javascript futtatását.
Ezen módosítás után nekünk fejlesztőknek nincs más dolgunk mint megfelelő választ adni az AJAX és normál (GET) kéréseknek. Hiszen egy AJAX kérésnek elég csak kommenteket átadnunk, míg normál kérés esetén a teljes weblapot újra elő kell állítanunk.
Lehet az egyszerű megoldás használni, (a példában használt) forum.php feldolgozza a normál kéréseket, míg a forum.ajax.php kezeli az AJAX kéréseket, ahogy egy jóbarátomtól tanultam. Bár ez a módszer azért nem nyerte el a tetszésemet, mert ha sok-sok AJAX kérés lesz, akkor minden fájlból 2 verzió lesz, és egy idő után már összefolynak a fájlnevek az FTP-n.
Vagy egy paramétert felhasználni csak azért hogy a kérés AJAX-e vagy sem, de így mindig egy változót kell átadni, melyre figyelni kell hogy nehogy elfelejtsük használni. Így ez még mindig nem nyerte el a tetszésemet.
A legjobb megoldás szerintem amit ez a David Walsh gyerek kitalált. A következő PHP kóddal szerveroldalon detektálni lehet hogy AJAX kérés futott-e le vagy normál request.
$ajax = $_SERVER['HTTP_X_REQUESTED_WITH'];
if( !empty($ajax) && strtolower($ajax) == 'xmlhttprequest') {
//AJAX kérés futott le
} else {
//normál kérés futott le
}
Hiába nekem ez tetszik a legjobban, ennek is van hátulütője. Nem minden szerver támogatja, így ha használja valaki előbb ellenőrizze, hogy a $_SERVER['HTTP_X_REQUESTED_WITH'] változó számára elérhető-e!