Ga naar inhoud
Drie sitemaps in omloop, en de aangekondigde was de verkeerde

Drie sitemaps in omloop, en de aangekondigde was de verkeerde

De sitemap is het saaiste bestand van je website. Het is ook vaak het enige bestand dat niemand sinds de oplevering heeft opengeklikt.

Bij een recent project heb ik dat wel gedaan, op verzoek van de opdrachtgever, die het vermoeden had dat er iets niet klopte. Er stonden zes adressen in. De site had honderden pagina's.

Er waren drie sitemaps, en de aangekondigde was de verkeerde

Wat daar stond, was niet het bestand dat het systeem genereert. Het was een echt bestand in de webmap, achtergebleven van een eerdere opzet, en de webserver serveert zo'n bestand uit voordat het verzoek de site ook maar bereikt.

Het werd nog beter. In robots.txt stond een derde bestand aangekondigd, van een plugin die er niet meer was. Dus waren er drie sitemaps in omloop: de aangekondigde, de gevonden en de echte. De eerste twee bestonden alleen nog uit gewoonte.

Als je één ding uit dit artikel meeneemt: typ het adres van je eigen sitemap in je browser en kijk wat er staat. Niet wat je beheerscherm zegt dat het genereert, maar wat je domein daadwerkelijk uitlevert.

De lege regel die je toepassing openzette

Een scantool meldde daarna iets over de Disallow-regels in robots.txt. Zulke meldingen zijn vaak ruis, maar deze klopte, en niet voor iedereen.

Google, Bing en elke lezer die de huidige standaard volgt, zien een groep beginnen bij een regel met een user-agent en nemen daarna de meest specifieke regel die past. Die lazen het bestand goed. Maar de oorspronkelijke afspraak uit 1994 sluit een groep af bij een lege regel, en de eenvoudiger crawlers en audittools doen dat nog steeds. De standaardbibliotheek van Python is er een van, en die zit onder een flink deel van de scanners.

In het bestand stond een lege regel direct onder de user-agent. Voor die lezers was de groep daarmee leeg, en hing elke Disallow eronder aan geen enkele bot. Bovendien nemen diezelfde lezers de eerste regel die past, en de eerste regel was een Allow voor de hele site. Dubbel dood dus.

Het gevolg: voor dat deel van de lezers stonden het klantportaal, de afmeldlinks en de hele beheeromgeving open om te crawlen. Niet onveilig, want daar zit een login op, maar wel precies wat je niet in een index wil hebben.

De oplossing is onspannend. Binnen een groep scheid je de delen met commentaarregels in plaats van met lege regels, en je zet de regels van specifiek naar algemeen. Het bestand staat nu in versiebeheer, in één vorm die op alle domeinen ongewijzigd gekopieerd wordt.

De sitemap opnieuw, en waarom op identiteit

Daarna de sitemap zelf. Die wordt nu in twee stappen opgebouwd: eerst per taal verzamelen, dan uitschrijven.

De sleutel is de identiteit van een item, niet zijn adres. Dat is het detail waar een meertalige sitemap op stukloopt. Een product heet in het Nederlands anders dan in het Duits, dus het adres is per taal anders, terwijl het hetzelfde product is. Sleutel je op het adres, dan zie je vier losse pagina's. Sleutel je op de identiteit, dan zie je één item in vier talen.

Elk adres draagt nu de andere talen bij zich als alternatief, met de brontaal als terugval voor bezoekers uit een land dat je niet bedient. Alleen de talen waarin het item echt bestaat, volledig en aan beide kanten. En het is dezelfde lijst als de regels in de kop van de pagina zelf, dus die twee kunnen niet meer uiteenlopen.

Met vier domeinen is dat belangrijker dan het lijkt. De sitemap is dan de enige plek waar in één keer te lezen valt welke adressen elkaars vertaling zijn. Google en de AI-zoekmachines nemen dat rechtstreeks over, in plaats van vier pagina's op te halen en er zelf iets van te maken.

Vier gaten, en wat ze kosten

Bij het opnieuw opbouwen kwamen er vier dingen boven die geen van de betrokkenen had verwacht.

Een gewone indexeerbare pagina stond in geen enkele sitemap, terwijl de voet en twee zijbalkkaarten ernaar linkten. Dat is een pagina die je zelf belangrijk vindt en die je zoekmachine nooit is aangeboden.

Een taal zonder eigen domein viel volledig uit de sitemaps. Zo'n taal woont op het basisadres, maar het bestand van dat adres gaf alleen zijn eigen taal. Een complete taalversie die nergens werd aangemeld.

Een noindex-vinkje op een term werd genegeerd. De pagina zelf zette wel een noindex, dus de sitemap diende een adres in dat de pagina daarna weigert te laten indexeren. Twee signalen die elkaar tegenspreken is slechter dan één duidelijk signaal.

En een pagina met een canonical naar een ander adres stond er onder zijn eigen adres in. Dat is dezelfde fout in spiegelbeeld: je vraagt om indexering van een pagina die zelf zegt dat hij ergens anders thuishoort.

Geen adressen die nergens aankomen

De laatste regel die erbij kwam: een adres hoort niet in de sitemap als de webserver het eerste stuk van dat pad zelf afvangt, of als robots.txt het dichtzet.

Die regel gaf meteen een vondst. De aanmeldpagina voor de nieuwsbrief heeft in het Engels en het Duits een pad dat botst met het pad van de nieuwsbriefmodule. De webserver stuurt dat verzoek naar die module, dus die twee pagina's zijn niet te openen. Niet door een crawler, en niet door een bezoeker.

Zo wordt een sitemapcontrole een manier om kapotte pagina's te vinden. Twee pagina's die in elk overzicht netjes op gepubliceerd stonden, bleken onbereikbaar.

Waarom dit voor AI-zoekmachines extra weegt

Een klassieke zoekmachine crawlt veel en corrigeert onderweg. Een antwoordmachine crawlt minder, leest structuur letterlijker en geeft één antwoord in plaats van tien links.

Dat maakt fouten duurder. Een taalversie die nergens is aangemeld, bestaat voor zo'n machine niet. Een hreflang-set die maar één kant op wijst, geeft hem geen reden om jouw Duitse pagina aan een Duitse vraag te koppelen. En een adres dat niet opent, kost je niet één bezoeker maar het hele onderwerp.

Wat je zelf in tien minuten kunt nakijken

Vijf dingen, geen gereedschap nodig.

Open het adres van je sitemap in je browser en tel de adressen. Kijk in robots.txt welke sitemap er aangekondigd staat en of dat dezelfde is. Zoek in robots.txt naar lege regels binnen een groep. Pak één pagina die in meerdere talen bestaat en controleer of de verwijzingen naar elkaar aan beide kanten staan. En klik drie willekeurige adressen uit je sitemap aan om te zien of ze openen.

Als daar iets uit komt, is het meestal geen klein ding.

Lees ook

Weet je wat jouw domein op dit moment uitlevert? Plan een

vrijblijvend gesprek

. Een controle op deze twee bestanden kost een uur en levert vaker iets op dan je zou willen.

Bert

Chat met ons