Hreflang-fouten: wat ze betekenen en hoe je ze oplost

De meeste hreflang-fouten komen op hetzelfde neer: de taalversies van een pagina zijn het niet met elkaar eens, waardoor zoekmachines niet kunnen vertrouwen op wat ze aangeven. Los die fouten eerst op, te beginnen met ontbrekende retourlinks en pagina's die niet naar zichzelf verwijzen. Meestal komen ze voort uit één template- of plugininstelling, dus je lost ze één keer op in plaats van pagina voor pagina. Hieronder lees je wat elke fout betekent, in de volgorde waarin ik ze zou aanpakken.

Voordat je begint: controleer twee pagina's

Hreflang is een reeks links die zoekmachines vertelt welke taalversie van een pagina ze aan iemand moeten tonen. Problemen zitten vaak in de relatie tussen twee pagina's. Controleer daarom een pagina en een van de vertalingen, niet alleen je homepage.

De gratis hreflang-checker leest de tags van een pagina in de HTML-head en de HTTP-header Link en opent vervolgens maximaal 20 taalversies om te kijken of die reageren en teruglinken. Goed om te weten: de tool leest je XML-sitemap niet. Staat je hreflang alleen in de sitemap, dan meldt het rapport dat er niets is gevonden. Dat betekent niet dat je configuratie fout is. Controleer die vermeldingen aan de hand van de regels hieronder.

Fouten die je als eerste moet oplossen

Hierdoor kunnen zoekmachines je hreflang voor een pagina of een paar pagina's negeren.

Een taalversie linkt niet terug ("ontbrekende retourlink"). Als je Engelse pagina de Duitse pagina vermeldt als de Duitse versie, moet de Duitse pagina ook de Engelse pagina vermelden. Als de link maar één kant op gaat, kunnen zoekmachines het paar negeren. Dit gebeurt meestal wanneer een taal later is toegevoegd, of wanneer alleen je hoofdtaal de tags heeft. Oplossing: elke versie bevat dezelfde volledige lijst.

De pagina verwijst niet naar zichzelf. Elke pagina vermeldt al haar versies, ook zichzelf. Oplossing: voeg de eigen URL van de pagina toe aan de lijst. Staat er in het rapport dat de pagina alleen naar zichzelf verwijst "met een andere afsluitende slash", gebruik dan exact het adres waarop de pagina bereikbaar is. Voor een zoekmachine zijn /de en /de/ twee URL's.

Een taalversie geeft geen 200-statuscode. Een link naar een pagina die een 404- of serverfout geeft, loopt dood. Dit gebeurt vaak bij een pagina die maar in een deel van de talen bestaat, terwijl een template ongeacht dat verschil alle talen vermeldt. Oplossing: vermeld alleen de talen waarin de pagina echt bestaat, of publiceer de ontbrekende versie.

De canonical-URL verwijst naar een andere pagina. Zoekmachines negeren hreflang op een pagina die niet canonical is. Het klassieke geval: elke vertaling heeft een canonical die naar de pagina in de hoofdtaal verwijst. Daarmee vertel je zoekmachines dat de vertalingen niet de echte pagina's zijn. Oplossing: de canonical van elke taalversie verwijst naar die versie zelf.

Een taalcode is onjuist. Dit zijn de twee fouten die je het vaakst ziet:

  • en-UK is ongeldig, omdat de landcode voor het Verenigd Koninkrijk GB is. Gebruik en-GB.
  • en_US is ongeldig, omdat hreflang een koppelteken gebruikt. Gebruik en-US.

Taalcodes zijn gebaseerd op ISO 639-1, eventueel gevolgd door een landcode uit ISO 3166-1, zoals de of de-AT. Een landcode op zichzelf is geen taal.

Een URL is relatief of leeg. Hreflang-URL's moeten volledig zijn, met https:// en het domein. Alleen /de/pricing is niet genoeg.

De tags staan in de body. Zoekmachines lezen hreflang-links alleen in de <head>. Een veelvoorkomende oorzaak is een verdwaalde tag of een script dat de head voortijdig afsluit, of een thema dat de tags te laat plaatst.

Eén taal verwijst naar twee verschillende URL's. Per taal mag er één adres in een set staan. Kijk of twee systemen tegelijk tags toevoegen, bijvoorbeeld een thema en een plugin.

Waarschuwingen die je ook moet oplossen

Deze kosten je niet altijd iets, maar ze zijn eenvoudig weg te werken:

  • Geen x-default. Hiermee geef je de pagina aan voor bezoekers van wie je de taal niet aanbiedt, vaak je hoofdtaal of een taalkeuzepagina. Het is optioneel, maar wordt aanbevolen.
  • <html lang> komt niet overeen. Een pagina die als Duits is getagd maar <html lang="en"> bevat, geeft tegenstrijdige signalen. Meestal is dit een standaardinstelling in een template die niemand heeft aangepast.
  • Een taalversie wordt omgeleid. Link naar het uiteindelijke adres, niet naar een adres dat daarnaartoe doorstuurt. Links met http:// en ontbrekende www zijn de gebruikelijke oorzaken.
  • Een taalversie vermeldt een andere talenlijst. De ene pagina vermeldt vijf talen en de vertaling vier. Vaak betekent dit dat een taal aan sommige pagina's is toegevoegd, maar niet aan andere.
  • Dezelfde URL staat vermeld voor meerdere talen. Het is mogelijk dat meerdere landen dezelfde pagina delen (de-DE, de-AT), maar als elke taal naar hetzelfde adres verwijst, zijn de vertalingen waarschijnlijk helemaal geen afzonderlijke pagina's.
  • De HTML en de HTTP-header spreken elkaar tegen. Kies één methode en gebruik die consequent.

Zo ziet een correcte set eruit

Bij een pagina in het Engels en Duits bevatten beide pagina's hetzelfde blok in hun <head>:

<link rel="alternate" hreflang="en" href="https://example.com/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing" />

De canonical van de Engelse pagina is https://example.com/pricing. De canonical van de Duitse pagina is https://example.com/de/preise. Dat is alles: op beide pagina's dezelfde lijst, volledige adressen, geldige codes en elke pagina met zichzelf als canonical. De generator op de checkerpagina maakt dit blok en de bijbehorende sitemapvermeldingen op basis van je lijst met talen en URL's.

Los de oorzaak op, niet de pagina

Op een site van welke omvang dan ook zou niemand hreflang handmatig moeten aanpassen. Als een controle mislukt, zoek dan uit wat de tags plaatst:

  1. Een thema of template. Eén aanpassing geldt voor elke pagina; dat is het goede nieuws.
  2. Een plugin. Controleer eerst de instellingen en kijk ook of een tweede plugin of je thema niet eveneens tags plaatst.
  3. Een sitemapgenerator. Genereer de sitemap opnieuw nadat je de talen hebt gewijzigd.
  4. Een handmatig gebouwde site. Overweeg de lijst te genereren op basis van één tabel met pagina's en talen, zodat een nieuwe taal niet maar op de helft van de site terechtkomt.

Voer de controle daarna opnieuw uit op dezelfde twee pagina's, plus een pagina die je onlangs hebt toegevoegd. Nieuwe pagina's zijn vaak de plek waar het opnieuw misgaat.

Verwacht niet dat de zoekresultaten dezelfde dag veranderen. Zoekmachines moeten de pagina's eerst opnieuw crawlen. Bovendien is hreflang een signaal, geen opdracht, dus met correcte tags weet je niet zeker welke versie bij elke zoekopdracht wordt getoond. Blijft de verkeerde taal daarna goed scoren, kijk dan of de juiste pagina volledige, relevante inhoud heeft en of je andere pagina's ernaar linken. Onze gids over een tweede taal toevoegen behandelt die bredere configuratie.

Als je hier liever niet meer over nadenkt

Ik heb dit in FolioPress ingebouwd, omdat hreflang veel regels kent voor iets wat onzichtbaar zou moeten zijn. Elke pagina krijgt automatisch de juiste tags, op de pagina en in de sitemap, met retourlinks, x-default, canonicals die naar zichzelf verwijzen en een vertaald adres per taal. Een pagina vermeldt alleen de talen waarvoor een versie bestaat, zodat een ontbrekende vertaling geen dode link oplevert.

Dit helpt alleen als je je site met FolioPress bouwt. Het lost hreflang niet op voor een site die je ergens anders beheert. Is er verder niets mis met je huidige site, dan is het aanpassen van de template goedkoper. Is dit al het tweede of derde probleem dat een taalplugin dit jaar heeft veroorzaakt, dan beginnen de abonnementen bij €12 per maand, met een gratis proefperiode van 30 dagen (prijzen).