International
Hreflang: return links, self-references, language codes and the pages they point at.
Several languages, no hreflang
Add hreflang links between the language editions of each page, so search engines show each reader the edition in their language instead of whichever ranks.
The site has several language versions, but does not tell Google which is for whom. Hreflang is the label "this page in German is the counterpart of that one in Polish." Without it Google guesses which version to show a user in Berlin, and often shows the Polish one because it has more links. Or it treats the versions as duplicates. Hreflang is added once in the template: every page lists all its language versions, itself included. Most CMSs with a language plugin do it automatically once switched on.
- Id
- MISSING_HREFLANG
- Fix estimate
- 60 min per page
Language set and canonical disagree
The page names itself in its language set under one address and canonicalises to another: make both use the same one.
- Id
- HREFLANG_CONFLICTS_CANONICAL
- Fix estimate
- 20 min per page
Same language declared twice
Give each language one target: declared twice with different addresses, the whole set is discarded.
- Id
- HREFLANG_DUPLICATE_ENTRY
- Fix estimate
- 20 min per page
Hreflang missing return tag
Page A says "my German version is B", but B says nothing about A. Hreflang works only when both pages confirm the relation; a one-sided declaration is ignored as if it were not there. Usually it is a page translated later whose template never got the full set of links, or a language version added by hand. Every page in the set should list all the others and itself.
- Id
- HREFLANG_MISSING_RETURN
- Fix estimate
- 10 min per page
hreflang set lacks a self-reference
Add an hreflang entry pointing at the page itself — every page in the cluster must list itself.
- Id
- HREFLANG_MISSING_SELF
- Fix estimate
- 4 min per page
Noindexed page still declares a language set
Either let the page be indexed or remove its hreflang links; a page kept out of the index never joins a language set, and the pages naming it lose their return link.
- Id
- HREFLANG_ON_NOINDEX_PAGE
- Fix estimate
- 10 min per page
Paginated page names the front of another language
Point each paginated page at the same page number in the other language; the link currently lands on that language’s first page.
- Id
- HREFLANG_PAGINATION_MISMATCH
- Fix estimate
- 15 min per page
One address declared as two languages
Give each language its own address in the set; one page cannot be both, and search engines drop the pair.
- Id
- HREFLANG_SAME_URL_TWO_LANGUAGES
- Fix estimate
- 10 min per page
Sitemap names a language alternate it does not list
Give every alternate its own <url> entry in the sitemap; an address named only inside another entry is not part of the set.
- Id
- HREFLANG_SITEMAP_TARGET_UNLISTED
- Fix estimate
- 10 min per page
Language link names the wrong language for its target
Match the hreflang value to the language the target page declares in its html lang attribute.
- Id
- HREFLANG_TARGET_LANG_MISMATCH
- Fix estimate
- 10 min per page
hreflang points to a broken or noindex page
Point hreflang at live, indexable pages — remove entries for pages that are gone or noindexed.
- Id
- HREFLANG_TO_BROKEN
- Fix estimate
- 6 min per page
A language alternate points at a page kept out of search
Point the alternate at a page that can be indexed, or drop it: the language it serves currently has nothing to be shown.
- Id
- HREFLANG_TO_NOINDEX
- Fix estimate
- 10 min per page
Language link lands on a redirect
Point the language link at the address that answers directly; the current target forwards elsewhere.
- Id
- HREFLANG_TO_REDIRECT
- Fix estimate
- 15 min per page
Language links disagree between places
The page head, the response header and the sitemap are read as one set: name the same target for a language in all of them.
- Id
- HREFLANG_TRANSPORT_CONFLICT
- Fix estimate
- 20 min per page
Invalid hreflang language code
- Id
- HREFLANG_INVALID_LANG_CODE
- Fix estimate
- 5 min per page
No x-default in the hreflang set
Add an x-default alternate naming the page to serve when no declared language matches the visitor.
- Id
- HREFLANG_MISSING_X_DEFAULT
- Fix estimate
- 10 min per page
Language link uses a country code as the language
hreflang takes a language first: "uk" is Ukrainian, and the United Kingdom is "en-GB".
- Id
- HREFLANG_REGION_AS_LANGUAGE
- Fix estimate
- 10 min per page
Language links written as paths without scheme and host
Write every hreflang href as a full URL with its scheme and host; the spec requires it, and a CDN serving the page under another host will otherwise point the whole set at the wrong site.
- Id
- HREFLANG_RELATIVE_URL
- Fix estimate
- 10 min per page
hreflang points to a canonicalized URL
Point hreflang at the canonical URL of each language version.
- Id
- HREFLANG_TO_NONCANONICAL
- Fix estimate
- 5 min per page
Page language disagrees with its own language link
Make the html lang attribute and the page's own hreflang entry agree; both are claims about this page.
- Id
- LANG_ATTRIBUTE_MISMATCH
- Fix estimate
- 10 min per page
og:locale contradicts the page language
Make og:locale agree with the lang attribute, so a shared link is not previewed in the wrong language.
- Id
- OG_LOCALE_MISMATCH
- Fix estimate
- 5 min per page