Sökmotorer och dynamiska webbplatser
När man jobbar med dynamiska webbplatser finns det en del saker man bör tänka på för att hålla sig väl med sökmotorerna. Jag har nyligen gjort två erfarenheter genom utvecklingen av Blogwalk; hur man undviker att bli bombarderad av förfrågningar från spindlarna, och hur man bör visa felsidor.
Flera URI:er per sida
En titt på Google visar att det i skrivande stund har indexerats 47 100 inlägg från Blogwalk. Det finns dock bara drygt 18 700, vilket ger ett snitt på 2,5 URI:er per inlägg! Alltså borde det rimligtvis gå åt 2,5 gånger mer bandbredd än nödvändigt för just Googles spindlar. Varje unik URI antas peka på en unik sida, så spindlarna kommer att indexera samma sida flera gånger. Om och om igen.
På Blogwalk har varje inlägg ett index som pekar ut det i databasen. Detta index anges till skriptet, som sedan visar inlägget: /blogwalk/index.php?post=1234567. Man kan också korta ned det till /blogwalk/?post=1234567 tack vare Apache. För att göra URI:n lite snyggare använder jag numera Apache-modulen mod_rewrite så att man istället kan skriva /blogwalk/post/1234567. Men det blir ännu värre: AdSense-reklam använder i stor grad URI:n för att avgöra vad som ska visas. Därför valde jag att inkludera inläggets titel i adressen, så att eventuella nyckelord hittas direkt. Alltså kan inläggen nås också via /blogwalk/post/1234567/titel_pa_inlagget. En fjärde URI till exakt samma sida – alla fungerar och indexeras flitigt av sökmotorerna.
Lösningen är att tala om för spindlarna vilka URI:er det är som gäller. Det görs helt enkelt genom att kontrollera den URI som angetts ($_SERVER["REQUEST_URI"] i PHP) och skicka http-koden 301 (”Moved Permanently”) tillsammans med den ”bästa” adressen. Då tas alla varianter bort, och endast en URI per sida finns kvar i indexet. Om man bara returnerar en annan adress med Location-fältet i http-huvudet används istället koden 302 (”Found”), som i det här fallet säger att den angivna URI:n ska fortsätta att indexeras.
Borttagna sidor
När man tidigare angav ett felaktigt index för ett inlägg på Blogwalk visades ett felmeddelande: ”Detta inlägg finns inte”. Http-koden som returnerades var fortfarande 200 (”OK”), och alltså kommer sökmotorn fortsätta indexera sidan med det nya innehållet. Lösningen är att returnera felkod 404 (”Not Found”) eller 410 (”Gone”). Med PHP görs det på följande sätt: header("HTTP/1.1 404 Not Found");. Så småningom kommer sidan tas bort ur indexet.
Läs fler artiklar om:
seo, webbutveckling
Detta var ju bra att veta. Tycker själv att jag har problemet med att folk kommer till min www variant när jag inte vill att de ska komma dit men jag tror att jag löste det som du med $_server. Det borde dock inte behövas i mitt fall men kommer inte på en bättre lösning.
Hade varit kul om du had ekunnat beskriva hur man kommer igång med mod_rewrite. behöver man ha stor kontroll över Apache eller räcker det med filer som .htaccess för att sätta igång det?
Skrivet av Pelle, onsdag 7 september 2005, 00:22
mod_rewrite kontrolleras i .htaccess-filen, om modulen är aktiverad av administratören. Man anger reguljära uttryck (eng. regular expressions) för att tolka en av användaren inskriven URL till en ”verklig” URL på webbsidan. Det vanligaste är nog att göra som jag beskrivit ovan, att dölja variabler.
Den här guiden verkar vara ganska bra, men som alltid finns det mycket att hämta på Google.
Skrivet av Christian Davén, onsdag 7 september 2005, 00:29
Tack så mycket för det.
Skrivet av Pelle, torsdag 8 september 2005, 18:04