hreflang annotations can be hard to implement properly. This tool allows you to quickly check if hreflang tags for a page (HTML and HTTP headers), or in XML Sitemaps, are correct. For more info check Google's documentation on hreflang tags.



Invalid URL
{{user_agent.name}}{{user_agent.token}}
Test URL
Status Redirect hreflang Tags Self-referencing Indexable Detected Language <html> lang Attribute Content-Language (meta http-equiv) Content-Language (HTTP Header)
{{data.status_code}} {{data.status_text}} {{data.redirect_url}} {{data.hreflang_count || '-'}} {{data.self_ref_hreflang_tags || 'Missing'}} {{data.indexable.status && 'yes' || 'no'}} {{data.indexable.reasons[0]}} {{data.detected_language || '-'}} {{data.html_lang || '-'}} {{data.content_language.html || '-'}} {{data.content_language.http || '-'}}

Fetch Upload
{{user_agent.name}}{{user_agent.token}}
Test sitemap(s)
Export (.xlsx) Google Sheets
hreflang Language Region Warnings Errors Source Alternate URL Status Redirect hreflang Tags Return Tag(s) Indexable Detected Language <html> lang Attribute Content-Language (meta http-equiv) Content-Language (HTTP Header)
{{tag.hreflang}} {{tag.language}} {{tag.region || '-'}}
  • {{warning}},
  • {{error}},
{{tag.source | uppercase}} {{tag.href}} {{tag.url_info.status_code || '-'}} {{tag.url_info.status_text}} {{tag.url_info.redirect_url}} {{tag.url_info.hreflang_count || '-'}} {{tag.url_info.return_hreflang_tags || '-'}} {{!tag.url_info.indexable && '-' || tag.url_info.indexable.status && 'yes' || 'no'}} {{tag.url_info.indexable.reasons[0]}} {{tag.url_info.detected_language || '-'}} {{tag.url_info.html_lang || '-'}} {{tag.url_info.content_language.html || '-'}} {{tag.url_info.content_language.http || '-'}}
Export (.xlsx) Google Sheets
URL (loc) Source hreflang Tags ({{xml_data.hreflang_count}}) Self-referencing hreflang Language Region Source Alternate URL hreflang Tags Return Tag(s) Warnings Errors
{{url.loc}} {{url.source}} {{url.hreflang_count || '-'}} {{url.hreflang_count && (url.self_ref_hreflang_tags || 'Missing') || '-'}} {{url.hreflang_tags[0].hreflang}} {{url.hreflang_tags[0].language}} {{url.hreflang_tags[0].region || '-'}} {{url.hreflang_tags[0].source}} {{url.hreflang_tags[0].href}} {{url.hreflang_tags[0].url_info.hreflang_count || '-'}} {{url.hreflang_tags[0].url_info.return_hreflang_tags || '-'}}
  • {{warning}},
  • {{error}},
{{url.loc}} {{url.source}} {{url.hreflang_count || '-'}} {{url.hreflang_count && (url.self_ref_hreflang_tags || 'Missing') || '-'}} {{tag.hreflang}} {{tag.language}} {{tag.region || '-'}} {{tag.source}} {{tag.href}} {{tag.url_info.hreflang_count || '-'}} {{tag.url_info.return_hreflang_tags || '-'}}
  • {{warning}},
  • {{error}},

Language Detection API

Daily requests: {{data.detectlanguage_api.requests_used}} / {{data.detectlanguage_api.requests_limit}}

Daily bytes: {{data.detectlanguage_api.bytes_used}} / {{data.detectlanguage_api.bytes_limit}}