Ik verloor een keer een stevige middag aan hreflang Een klant had een site in het Engels en Frans, verdeeld over /en/ en /fr/, en hun Franse pagina's zouden gewoon niet ranking in Frankrijk - Google bleef de Engelse versie boven water halen bij Franse zoekers De markup zag er correct uit Het zat in het hoofd, de codes waren er, de URL's opgelost Het probleem, zo bleek, was dat de Engelse pagina's naar de Franse wezen maar de Franse pagina's niet terughingen Hreflang moet wederkerig zijn, en Google gooide het hele cluster weg omdat de retourtags ontbraken Niets in de browser vertelde me dat Geen fout, geen waarschuwing - alleen pagina's die stilletjes niet konden rangschikken waar ze zouden moeten zijn.
Dat is hreflang in een notendop Het concept is simpel: vertel zoekmachines welke taal en regionale versie van een pagina om te laten zien welke gebruikers De uitvoering is een mijnenveld van ISO-codes, casing conventies, reciprocity regels, en een fallback tag die de helft van het internet vergeet Ik bouw en onderhoud meertalige sites vaak genoeg - over Toolz.dev, WP Adminify' s documentatie, en verschillende Laravel en React projecten - dat ik een tool wilde die de tags zou genereren en de fouten zou vangen voordat ze verzonden worden Dat is de Hreflang Generator, en deze gids is alles wat ik die middag graag had geweten.
Begin bij het concept in plaats van bij de tool hreflang tags uitgelegd, wat de hub is voor dit onderwerp en aansluit bij de stukken op x-standaard, veel voorkomende hreflang fouten, en raamwerkopstellingen voor Volgende.js en WordPress.
tl;dr: hreflang-tags vertellen zoekmachines welke taal/regioversie van een pagina elke gebruiker moet bedienen, met behulp van de
rel="alternate" hreflang="x"annotatie. Codes volgen ISO 639-1 (taal) en ISO 3166-1 (regio) - dus Groot-Brittannië is dat ookGB, nietUK. Tags moeten wederkerig zijn (elke pagina linkt terug) en u moet eenx-defaultterugval. De generator voert geldige tags uit als HTML-links, XML-sitemapitems of een HTTP-header, valideert elke code, vangt duplicaten op en draait 100% in uw browser.
Wat zijn hreflang tags en wanneer heb je ze nodig?
Een hreflang-tag is een annotatie met de tekst " Er is een andere versie van deze pagina voor een specifieke taal en regio, en hier is de URL." De syntaxis is <link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/" />, waar fr-CA betekent Frans zoals gesproken in Canada Wanneer Google deze relaties begrijpt, kan het de Canadees-Franse pagina aan een Franstalige in Canada en de Amerikaans-Engelse pagina aan iemand in de Verenigde Staten serveren, in plaats van te raden of standaard te gaan naar welke versie het toevallig als eerste crawlde.
Je hebt hreflang nodig wanneer je substantieel dezelfde content hebt in meer dan één taal, of dezelfde taal gericht op meer dan één regio Een blog die alleen in het Engels bestaat heeft het niet nodig Een SaaS-marketingsite vertaald in zes talen absoluut wel De tussendoos - één taal, meerdere regio's, zoals afzonderlijke Amerikaanse en Britse winkels die beide in het Engels zijn - is waar hreflang het meest waardevol is en het meest over het hoofd wordt gezien, omdat de pagina's eruit zien als duplicaten voor Google, tenzij je ze expliciet declareert als regionale varianten.
De uitbetaling is tweeledig Ten eerste staat de juiste versie op de juiste markt, waardoor het doorklikken en converteren wordt verhoogd omdat gebruikers landen op prijzen, valuta en bewoordingen die bij hen passen. Ten tweede maakt hreflang het probleem van dubbele inhoud onschadelijk: in plaats van dat uw vrijwel identieke regionale pagina's met elkaar concurreren en kannibaliseren, behandelt Google ze als één cluster van alternatieven en kiest het de beste pasvorm per vraag.
Waarom laten de codes iedereen struikelen?
Omdat ze normen volgen, en niet intuïtie, en de normen kantgevallen hebben.
De waarden zijn BCP 47-taaltags, gedefinieerd in RFC-5646, en Google' zijn eigen gelokaliseerde versies documentatie is de autoriteit op welke subset zij accepteert.
Het taalgedeelte is een ISO 639-1-code: twee letters, kleine letters, zoals en, fr, de, ja. Het optionele regiogedeelte is een ISO 3166-1 alfa-2-code: twee letters, hoofdletters, zoals US, GB, DE. Doe ze samen met een koppelteken en je krijgt en-US of de-DE. De conventies die mensen bijten:
- de Verenigd Koninkrijk is
GB, nietUK.UKgeen geldige ISO 3166-1-code is, enen-UKis een no-op. - Taal staat voorop en is verplicht; regio is optioneel en kan niet op zichzelf staan. Je kunt je niet richten
USop zichzelf bestaat er niet zoiets als hreflang voor alleen regio's. Het is altijd taal, optioneel beperkt per regio. - Latijns-Amerika gebruikt een UN M49-code,
es-419, omdat het veel landen omvat in plaats van één. Deze driecijferige regiocode is geldig en nuttig voor "Spaanse, Latijns-Amerikaanse variëteit." - Chinees heeft vaak een scriptsubtag nodig, zoals
zh-Hant(Traditioneel) ofzh-Hans(Vereenvoudigd), omdat de geschreven vorm er meer toe doet dan het land.
De generator valideert dit alles Het controleert elke code aan de hand van de verwachte vorm, normaliseert de behuizing (kleine taal, hoofdlettersgebied, titlecase script), en waarschuwt u wanneer een subtag geen erkende ISO taal of regio is - dus en-UK wordt gemarkeerd voordat het een crawl verspilt.
Hoe gebruik ik de Hreflang Generator?
De tool is opgebouwd rond een lijst met taalversies en een keuze uit het uitvoerformaat.
Stap 1 - Voeg uw versies toe. Elke rij is een taal/regiocode plus de volledige URL van die versie Een snelkeuzelijst biedt de gangbare codes (en-US, es-419, zh-Hant, x-default, en meer) zodat je niet de exacte behuizing hoeft te onthouden Voeg een rij per versie.
Stap 2 - Voeg een x-standaard toe. Voeg een rij toe met de code x-default wijzend naar uw fallback-URL. Dit is de versie die wordt aangeboden aan gebruikers op wier taal u niet expliciet bent gericht - vaak een taalselectorpagina of uw primaire startpagina.
Stap 3 - Kies een formaat. Schakelen tussen HTML <link> tags voor de paginakop, xhtml:link vermeldingen voor een XML-sitemap of een HTTP Link header voor niet-HTML-bestanden Terwijl u bewerkt, valideert de generator elke code en URL, vangt dubbele codes op en toont een statustabel per rij, zodat u in één oogopslag kunt zien welke vermeldingen geldig zijn.
Stap 4 - Kopieer en implementeer wederzijds. Kopieer de uitvoer en - dit is het onderdeel dat ertoe doet - voeg dezelfde complete set tags toe aan elke URL in de groep, inclusief een zelfreferentiële invoer. Bevestig vervolgens de installatie met het International Targeting-rapport in de Google Search Console.
Alles draait client-side, dus uw URL-structuur - die uw hele internationale architectuur kan blootleggen - verlaat nooit de browser Dat is hetzelfde privacymodel achter elke tool op de site, behandeld in de Gids voor gegevensprivacy.
Hoe ziet de uitvoer er in elk formaat uit?
Hier is een uitgewerkt voorbeeld in plaats van een beschrijving. Een winkel die verkoopt in de VS, Groot-Brittannië, Frankrijk en Latijns-Amerika, met een taalselectorpagina als terugval. Vijf rijen gaan naar binnen:
| hreflang | url |
|---|---|
x-default |
https://example.com/ |
en-US |
https://example.com/us/ |
en-GB |
https://example.com/uk/ |
fr-FR |
https://example.com/fr/ |
es-419 |
https://example.com/latam/ |
Let op twee dingen over die set vóór de uitvoer. en-US en en-GB zijn beide Engels en verschillen alleen per markt, wat het geval is waarvoor hreflang bestaat en het geval dat de meeste sites overslaan. En es-419 is de UN M49-regiocode voor Latijns-Amerika, die de tool accepteert als geldig in plaats van als gemarkeerd, omdat een driecijferige regio legaal is in een taaltag, ook al is het geen ISO 3166-1 alfa-2-code.
HTML link tags, voor de pagina <head>piepsel
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
<link rel="alternate" hreflang="en-US" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="es-419" href="https://example.com/latam/" />
Dat exacte blok gaat op alle vijf pagina's, ongewijzigd Niet & quot; de andere vier" op elke pagina: alle vijf, inclusief de pagina' zijn eigen vermelding Dat is wat de annotaties wederkerig maakt.
XML-sitemapitems, waarbij het gereedschap dezelfde set in een wikkelt <url> element en gebruikt uw pagina-URL als de <loc>piepsel
<url>
<loc>https://example.com/us/</loc>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/" />
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/us/" />
<xhtml:link rel="alternate" hreflang="en-GB" href="https://example.com/uk/" />
<xhtml:link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<xhtml:link rel="alternate" hreflang="es-419" href="https://example.com/latam/" />
</url>
De generator herinnert je aan het stuk dat buiten het blok leeft dat het kan produceren: de <urlset> element heeft de xhtml-naamruimte nodig die is gedeclareerd, of elke xhtml:link invoer wordt genegeerd terwijl het bestand nog steeds als sitemap wordt gevalideerd.
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
HTTP Link-header, een enkele headerwaarde voor bestanden met geen <head> te bewerken, zoals een PDF:
Link: <https://example.com/>; rel="alternate"; hreflang="x-default", <https://example.com/us/>; rel="alternate"; hreflang="en-US", <https://example.com/uk/>; rel="alternate"; hreflang="en-GB", <https://example.com/fr/>; rel="alternate"; hreflang="fr-FR", <https://example.com/latam/>; rel="alternate"; hreflang="es-419"
Het is één lange lijn van opzet: een enkele Link header met kommagescheiden waarden In nginx is dat één add_header Link "..."; richtlijn; in Apache een Header set Link "...". Het over meerdere delen verdelen Link headers werken ook, maar als je het als één waarde behoudt, wordt het duidelijk dat de set compleet is.
Wat betekenen de generator's waarschuwingen?
De tool scheidt fouten, die voorkomen dat een item wordt uitgezonden, van waarschuwingen, die het doorlaten maar iets markeren waar je naar moet kijken. Het onderscheid is belangrijk omdat de meeste hreflang-fouten een juridische opmaak zijn die niets betekent.
| bericht | Wat het teweegbracht | Wat te doen |
|---|---|---|
| Geen geldige taaltag | De waarde komt niet overeen language[-Script][-REGION] |
Gebruik eerst een taalcode, regio optioneel of letterlijk x-default |
| Taalsubtag is geen gebruikelijke ISO 639-1-code | Goed gevormde maar niet erkende taal | Controleer het aan de hand van ISO 639-1; de tag wordt op beide manieren uitgezonden |
| Regio-subtag is geen gebruikelijke ISO 3166-1-code | Goed gevormde maar niet erkende regio | Dit is wat vangt en-UK, waar GB klopt |
| Dupliceren hreflang | Dezelfde code verschijnt twee keer in de set | Verwijder er één; twee vermeldingen voor één code zijn een tegenstrijdigheid |
| Geen x-standaard ingesteld | De set heeft geen terugvalrij | Voeg er één toe die naar een keuzepagina of uw primaire versie verwijst |
| hreflang werkt in clusters | Slechts één URL in de set | Voeg de andere taalversies toe; een cluster met één invoer doet niets |
| hreflang moet wederkerig zijn | Altijd getoond | Implementeer het identieke blok naar elke URL in de groep |
De laatste wordt altijd weergegeven in plaats van voorwaardelijk, omdat het de storing is die geen enkel hulpmiddel aan de clientzijde kan detecteren Wederkerigheid is een eigenschap van de andere pagina's, niet van de set die voor u ligt, dus de generator stelt de regel in plaats van te doen alsof hij deze verifieert. Elke andere waarschuwing hier is iets dat hij echt kan controleren.
Merk ook op dat codes op de behuizing worden genormaliseerd in plaats van afgewezen: EN-gb HALD en-GB, zh-hant HALD zh-Hant. Taaltags zijn hoofdletterongevoelig op elkaar afgestemd, dus de behuizing is conventioneel, maar consistente uitvoer maakt een verschil tussen twee pagina's leesbaar.
Welk uitvoerformaat moet ik kiezen?
Google accepteert drie implementatiemethoden, en de juiste is afhankelijk van uw stapel en paginatelling.
| werkwijze | het beste voor | Afweging |
|---|---|---|
HTML <link> tags |
De meeste sites; directe controle per pagina | Voegt gewicht toe aan elke pagina's hoofd; moet op elke pagina staan |
XML-sitemap xhtml:link |
Grote sites; houdt HTML schoon | Vereist het onderhouden van sitemap; langzamer voor Google om te verwerken |
HTTP Link kop |
Niet-HTML-bestanden zoals PDF's | Heeft serverconfiguratie nodig; moeilijker te controleren |
Voor een typische site, HTML link tags zijn het meest rechtlijnig - je ziet ze in de bron, ze zijn gemakkelijk te debuggen, en elk raamwerk kan ze renderen Voor grote sites met honderden taalvarianten, hreflang in de XML-sitemap houdt uw paginahoofden slank en centraliseert de annotaties in één bestand (vergeet niet toe te voegen xmlns:xhtml="http://www.w3.org/1999/xhtml" naar de <urlset> element, waar de tool je aan herinnert).De HTTP-header methode is niche maar essentieel voor niet-HTML-bronnen zoals PDF's waar er geen hoofd is om een linktag in te plaatsen.
Welke u ook kiest, gebruik slechts één methode per set pagina's Het mixen van HTML-tags en sitemapvermeldingen voor dezelfde URL's kan Google conflicterende signalen sturen Als u al een sitemap genereert, slots de tool' sitemapformaat rechtstreeks in de uitvoer van de XML-sitemapgenerator.
Wat is x-default en waarom maakt het uit?
x-default is de hreflang-waarde die een fallback-pagina specificeert voor elke gebruiker wiens taal of regio u niet expliciet hebt getarget Als uw site Engelse, Franse en Duitse versies heeft en iemand die in het Japans surft, arriveert x-default vertelt Google waar ze ze naartoe moeten sturen - meestal een neutrale startpagina of een pagina waarmee ze een taal kunnen kiezen.
Het is optioneel in de zin dat hreflang zonder werkt, maar Google raadt aan om het op te nemen, en ik behandel het in de praktijk als verplicht Zonder x-standaard krijgen ongeëvenaarde gebruikers welke versie Google ook het dichtst in de buurt raadt, wat vaak gewoon je meest gekraakte pagina is in plaats van een bewuste keuze.
Voor het gereedschap's deel: een set met geen x-default rij verhoogt een waarschuwing in plaats van een fout, dus je kunt nog steeds de uitvoer kopiëren, maar je zult te horen hebben gekregen Voeg de rij toe en de fallback wordt uitgezonden in welke van de drie formaten je ook hebt geselecteerd, in dezelfde positie op elke pagina Waar te wijzen, en de fouten die het nutteloos maken, worden behandeld in de x-standaard gids.
Waarom moet hreflang wederkerig zijn?
Dit is degene die me een middag heeft gekost, dus het krijgt een eigen gedeelte. Hreflang-annotaties moeten wederkerig zijn. Als pagina A pagina B als zijn Franse alternatief declareert, moet pagina B pagina A in ruil daarvoor declareren Google vertrouwt de relatie alleen wanneer beide partijen deze bevestigen Als de retourneringstag ontbreekt, negeert Google de annotatie volledig - geruisloos, zonder fout op de pagina.
De schone manier om hieraan te voldoen is door de volledige, identieke set hreflang-tags op elke pagina in de groep te plaatsen, inclusief een zelfreferentiële invoer (de pagina die naar zichzelf wijst).Dus op uw en-US pagina, u voegt tags toe voor en-US, en-GB, fr-FR, de-DE, en x-default - en exact hetzelfde blok verschijnt op de en-GB pagina, de fr-FR pagina, enzovoort Elke pagina in het cluster draagt de hele kaart. Het voelt overbodig, maar het is wat de annotaties wederkerig maakt en het is wat Google verwacht.
Dit is de reden waarom het genereren van de tags slechts stap één is. De gratis hreflang generator produceert het complete blok voor u om te hergebruiken over het hele cluster, en het herinnert u aan wederkerigheid in zijn waarschuwingen, maar de implementatie discipline - hetzelfde blok, elke pagina - is op u. Krijg dat goed en de codes goed, en hreflang werkt rustig en betrouwbaar Verkrijg het verkeerd en het faalt net zo stil Voor de bredere context van het assembleren van een technische SEO stack, Ik verzamelde de gerelateerde hulpprogramma's in de overzicht van webontwikkelaarstoolkits.
Hoe test ik dat Hreflang werkt?
Na het inzetten verifiëren met de International Targeting rapport (historisch het hreflang-rapport genoemd) in Google Search Console Het bevat fouten zoals "no return tags" en "onbekende taalcodes" op uw hele site, wat veel sneller is dan het één voor één controleren van pagina's Een crawl met een SEO-audittool bevestigt ook dat elke pagina de volledige wederkerige set bevat.
De fouten die ik het vaakst zie, in ruwe volgorde van frequentie: ontbrekende retourtags (de wederkerigheidsfout hierboven), geen x-standaard, gebruiken UK in plaats van GB of andere niet-ISO-codes, alleen regio-tags die proberen een land zonder taal aan te vallen, relatieve URL's waar hreflang absolute vereist, en implementatiemethoden mengen voor dezelfde pagina's Elk van deze produceert markup die er plausibel uitziet en niets doet.
de hreflang tag generator is ontworpen om degenen die een machine kan vangen - verkeerd opgemaakte codes, onbekende subtags, duplicaten, niet-absolute URL's en de ontbrekende x-standaard - te vangen en om u te herinneren aan degenen die het niet voor u kan afdwingen, namelijk wederkerigheid. De volledige catalogus, met het symptoom dat iedereen produceert, is aanwezig 12 veel voorkomende hreflang fouten. Als u hreflang in een grotere meertalige build bedraadt, zal de meta tag generator verwerkt de rest van uw hoofd per pagina, en de Handleiding voor coderingshulpmiddelen rondt de ontwikkelaarsworkflow af.
Voor welke randgevallen moet je plannen?
Als de basis eenmaal is gelegd, komen een handvol situaties vaak genoeg naar voren om op te plannen. Canonieke tags en hreflang moeten het eens zijn. Elke pagina' s canonical moet naar zichzelf verwijzen, niet naar een andere taalversie - als uw Franse pagina canonicaliseert naar de Engelse, zegt u tegen Google dat hij de Franse pagina volledig moet laten vallen, waardoor de hreflang die u zojuist hebt toegevoegd, wordt opgeheven. Houd canonicals zelfreferentieel binnen een taalcluster en laat hreflang de relaties tussen clusters beschrijven; hreflang vs canoniek werkt door de combinaties.
Taal en land zijn onafhankelijke assen. Het is volkomen geldig om te hebben en-US, en-GB, en en-CA allemaal in het Engels, maar gericht op verschillende landen, en even geldig om te hebben fr-CA en en-CA beide richten zich op Canada in verschillende talen Ga niet uit van één pagina per land of één per taal; u brengt de specifieke combinaties in kaart die uw site daadwerkelijk bedient.
Achterliggende slashes en protocollen moeten overeenkomen met uw echte URL's. hreflang wijst naar exacte URL's, dus https://example.com/fr/ en https://example.com/fr zijn verschillende doelen Gebruik de canonieke, indexeerbare vorm van elke URL - dezelfde die u in een sitemap zou indienen - zodat de annotatie wordt opgelost naar een live pagina in plaats van een omleiding Een omleiding in een hreflang-doel is niet fataal, maar het voegt een hop en een kans toe dat het signaal verzwakt, dus het is de moeite waard om exact te worden.
Veelgestelde vragen
Wat is een Hreflang-tag?
Een hreflang-tag vertelt zoekmachines welke taal en regionale versie van een pagina een bepaalde gebruiker moet laten zien. Het gebruikt de rel="alternate" hreflang="x" annotatie, waarbij x een taalcode is (optioneel met een regio), zodat een Spaanstalige in Mexico uw es-MX-pagina kan krijgen in plaats van uw Engelse. Hreflang helpt internationale sites problemen met dubbele inhoud te voorkomen en de juiste pagina in elke markt te rangschikken.
Wat is het juiste Hreflang-formaat?
De waarde is een ISO 639-1 taalcode, optioneel gevolgd door een regio als ISO 3166-1 alfa-2 code - bijvoorbeeld en, en-GB, of pt-BR. De taal komt op de eerste plaats en de regio is optioneel; je kunt niet alleen een regio targeten Let op de normen verschillen van alledaagse afkortingen: het Verenigd Koninkrijk is GB, niet UK.
Wat betekent X-default in Hreflang?
X-default specificeert de terugvalpagina voor gebruikers van wie de taal of regio u niet expliciet heeft getarget. Het is meestal uw startpagina of een taalkeuzepagina. Google raadt aan om een X-default op te nemen in elke Hreflang-set, zodat ongeëvenaarde bezoekers ergens verstandig worden gestuurd in plaats van een willekeurige taalversie.
Waar moet ik Hreflang-tags plaatsen?
U kunt hreflang op drie plaatsen implementeren: als link rel="alternate" tags in de HTML-kop, als xhtml: link-items in uw XML-sitemap, of als een HTTP Link-header (handig voor niet-HTML-bestanden zoals PDF's) Kies één methode en pas deze consistent toe - door ze voor dezelfde pagina's te mengen, kunnen tegenstrijdige signalen worden verzonden Deze tool genereert ze alle drie.
Moeten hreflang-tags wederkerig zijn?
Ja. indien pagina A pagina B als zijn Franse plaatsvervanger verklaart, moet pagina B pagina A in ruil daarvoor declareren Google negeert hreflang annotaties die niet worden bevestigd door retournering tags op de pagina's waarnaar ze verwijzen De eenvoudigste aanpak is om de volledige, identieke set van hreflang inzendingen - inclusief een zelf-referentiële - op elke pagina in de groep op te nemen.
Kunnen hreflang-tags dubbele inhoud in verschillende regio's repareren?
Hreflang verwijdert geen dubbele inhoud, maar het vertelt Google dat vergelijkbare pagina's regionale of taalvarianten van elkaar zijn in plaats van duplicaten om uit te filteren. Dit helpt de juiste versie in elke markt te rangschikken in plaats van de pagina's die elkaar kunnennibaliseren. Voor echt identieke pagina's, combineer Hreflang met de juiste canonieke tags die elk naar zichzelf verwijzen.
Hoe test ik dat Hreflang werkt?
Gebruik het rapport International Targeting (of Hreflang) in de Google Search Console, waarin fouten worden vermeld, zoals ontbrekende retourtags en onbekende taalcodes. U kunt de site ook crawlen met een SEO-audittool om te bevestigen dat elke pagina de volledige wederzijdse set bevat. Fixes kunnen even duren voordat ze worden nagedacht, aangezien Google elke pagina in de groep opnieuw moet crawlen.
Worden mijn gegevens privé gehouden?
Ja. De tags worden volledig in uw browser gegenereerd met gewoon JavaScript. Uw URL's en sitestructuur worden nooit verzonden, gelogd of opgeslagen, en de generator blijft werken zonder een netwerkverbinding zodra de pagina is geladen.



