Hreflang Validator: Return Links, x-default, Invalid Codes avatar

Hreflang Validator: Return Links, x-default, Invalid Codes

Pricing

$3.00 / 1,000 pages

Go to Apify Store
Hreflang Validator: Return Links, x-default, Invalid Codes

Hreflang Validator: Return Links, x-default, Invalid Codes

Validate hreflang on multilingual pages: reads HTML and HTTP Link headers, checks language/region codes, x-default, self-reference, canonical conflicts, and fetches each alternate to confirm the return link Google requires. Extracts fields: url, finalUrl, hreflangCount, languages, tags.

Pricing

$3.00 / 1,000 pages

Rating

0.0

(0)

Developer

CarrierDaily

CarrierDaily

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Security

Limited permissions

Share

Validate hreflang on multilingual pages: reads HTML and HTTP Link headers, checks language/region codes, x-default, self-reference, canonical conflicts, and fetches each alternate to confirm the return link Google requires.

Why this actor

  • Actually fetches alternates to verify return links (most tools only list tags).
  • Pay only for results: $3.00 per 1,000 pages, no start fee, failed lookups are free.
  • Robust: automatic retries with exponential backoff, respects Retry-After, per-item error rows instead of crashed runs.
  • Clean, flat JSON/CSV/Excel output ready for Google Sheets, Make, Zapier, n8n, Clay, or the Apify API.

Use cases

  • International SEO audits
  • QA after site migrations or new locales
  • Agencies reporting on global sites
  • Ecommerce with country stores
  1. Configure urls, checkReturnLinks in the Input tab (or leave the prefilled sample values to test immediately).
  2. Optionally set maxItems to cap the number of results and control spend.
  3. Click Start and export structured results as JSON, CSV, Excel, or connect directly via API / MCP / n8n / Make.

Input

FieldTypeDescription
urlsarrayMultilingual pages to validate.
checkReturnLinksbooleanFetch each alternate and confirm it links back (Google requirement).
maxItemsinteger0 = no limit. Caps cost.

Example input:

{
"urls": [
"https://www.apple.com/"
]
}

Output

Each dataset item looks like this (real sample from a test run, long fields trimmed):

{
"url": "https://www.apple.com/",
"finalUrl": "https://www.apple.com/",
"hreflangCount": 137,
"languages": [
"ar-AE",
"ar-BH",
"ar-EG",
"\u2026"
],
"tags": {
"en-US": "https://www.apple.com/",
"ar-AE": "https://www.apple.com/ae-ar/",
"en-AE": "https://www.apple.com/ae/",
"en-AM": "https://www.apple.com/am/",
"de-AT": "https://www.apple.com/at/",
"en-AU": "https://www.apple.com/au/",
"en-AZ": "https://www.apple.com/az/",
"fr-BE": "https://www.apple.com/befr/",
"nl-BE": "https://www.apple.com/benl/",
"bg-BG": "https://www.apple.com/bg/",
"ar-BH": "https://www.apple.com/bh-ar/",
"en-BH": "https://www.apple.com/bh/",
"pt-BR": "https://www.apple.com/br/",
"en-BW": "https://www.apple.com/bw/",
"en-CA": "https://www.apple.com/ca/",
"fr-CA": "https://www.apple.com/ca/fr/",
"fr-CF": "https://www.apple.com/cf/",
"de-CH": "https://www.apple.com/chde/",
"fr-CH": "https://www.apple.com/chfr/",
"fr-CI": "https://www.apple.com/ci/",
"es-CL": "https://www.apple.com/cl/",
"fr-CM": "https://www.apple.com/cm/",
"es-CO": "https://www.apple.com/co/",
"cs-CZ": "https://www.apple.com/cz/",
"de-DE": "https://www.apple.com/de/",
"da-DK": "https://www.apple.com/dk/",
"et-EE": "https://www.apple.com/ee/",
"ar-EG": "https://www.apple.com/eg-ar/",
"en-EG": "https://www.apple.com/eg/",
"es-ES": "https://www.apple.com/es/",
"fi-FI": "https://www.apple.com/fi/",
"fr-FR": "https://www.apple.com/fr/",
"en-GE": "https://www.apple.com/ge/",
"fr-GN": "https://www.apple.com/gn/",
"fr-GQ": "https://www.apple.com/gq/",
"el-GR": "https://www.apple.com/gr/",
"en-GW": "https://www.apple.com/gw/",
"zh-HK": "https://www.apple.com/hk/",
"en-HK": "https://www.apple.com/hk/en/",
"hr-HR": "https://www.apple.com/hr/",
"hu-HU": "https://www.apple.com/hu/",
"en-ID": "https://www.apple.com/id/",
"en-IE": "https://www.apple.com/ie/",
"en-IL": "https://www.apple.com/il/",
"en-IN": "https://www.apple.com/in/",
"it-IT": "https://www.apple.com/it/",
"ar-JO": "https://www.apple.com/jo-ar/",
"en-JO": "https://www.apple.com/jo/",
"ja-JP": "https://www.apple.com/jp/",
"en-KE": "https://www.apple.com/ke/",
"en-KG": "https://www.apple.com/kg/",
"ko-KR": "https://www.apple.com/kr/",
"ar-KW": "https://www.apple.com/kw-ar/",
"en-KW": "https://www.apple.com/kw/",
"en-KZ": "https://www.apple.com/kz/",
"es-HN": "https://www.apple.com/la/",
"es-AR": "https://www.apple.com/la/",
"es-SV": "https://www.apple.com/la/",
"es-DO": "https://www.apple.com/la/",
"es-EC": "https://www.apple.com/la/",
"es-GT": "https://www.apple.com/la/",
"es-PE": "https://www.apple.com/la/",
"es-BO": "https://www.apple.com/la/",
"es-NI": "https://www.apple.com/la/",
"es-VE": "https://www.apple.com/la/",
"es-PA": "https://www.apple.com/la/",
"es-CR": "https://www.apple.com/la/",
"es-UY": "https://www.apple.com/la/",
"es-PY": "https://www.apple.com/la/",
"en-AG": "https://www.apple.com/lae/",
"en-BS": "https://www.apple.com/lae/",
"en-TC": "https://www.apple.com/lae/",
"en-TT": "https://www.apple.com/lae/",
"en-SR": "https://www.apple.com/lae/",
"en-BM": "https://www.apple.com/lae/",
"en-BB": "https://www.apple.com/lae/",
"en-BZ": "https://www.apple.com/lae/",
"en-GD": "https://www.apple.com/lae/",
"en-KY": "https://www.apple.com/lae/",
"en-LC": "https://www.apple.com/lae/",
"en-MS": "https://www.apple.com/lae/",
"en-KN": "https://www.apple.com/lae/",
"en-AI": "https://www.apple.com/lae/",
"en-VC": "https://www.apple.com/lae/",
"en-GY": "https://www.apple.com/lae/",
"en-VG": "https://www.apple.com/lae/",
"en-DM": "https://www.apple.com/lae/",
"en-JM": "https://www.apple.com/lae/",
"de-LI": "https://www.apple.com/li/",
"lt-LT": "https://www.apple.com/lt/",
"fr-LU": "https://www.apple.com/lu/",
"lv-LV": "https://www.apple.com/lv/",
"fr-MA": "https://www.apple.com/ma/",
"en-MD": "https://www.apple.com/md/",
"en-ME": "https://www.apple.com/me/",
"en-MG": "https://www.apple.com/mg/",
"en-MK": "https://www.apple.com/mk/",
"fr-ML": "https://www.apple.com/ml/",
"zh-MO": "https://www.apple.com/mo/",
"en-MT": "https://www.apple.com/mt/",
"fr-MU": "https://www.apple.com/mu/",
"es-MX": "https://www.apple.com/mx/",
"en-MY": "https://www.apple.com/my/",
"en-MZ": "https://www.apple.com/mz/",
"fr-NE": "https://www.apple.com/ne/",
"en-NG": "https://www.apple.com/ng/",
"nl-NL": "https://www.apple.com/nl/",
"no-NO": "https://www.apple.com/no/",
"en-NZ": "https://www.apple.com/nz/",
"ar-OM": "https://www.apple.com/om-ar/",
"en-OM": "https://www.apple.com/om/",
"en-PH": "https://www.apple.com/ph/",
"pl-PL": "https://www.apple.com/pl/",
"pt-PT": "https://www.apple.com/pt/",
"ar-QA": "https://www.apple.com/qa-ar/",
"en-QA": "https://www.apple.com/qa/",
"ro-RO": "https://www.apple.com/ro/",
"ar-SA": "https://www.apple.com/sa-ar/",
"en-SA": "https://www.apple.com/sa/",
"sv-SE": "https://www.apple.com/se/",
"en-SG": "https://www.apple.com/sg/",
"en-SI": "https://www.apple.com/si/",
"sk-SK": "https://www.apple.com/sk/",
"fr-SN": "https://www.apple.com/sn/",
"th-TH": "https://www.apple.com/th/",
"en-TJ": "https://www.apple.com/tj/",
"en-TM": "https://www.apple.com/tm/",
"fr-TN": "https://www.apple.com/tn/",
"tr-TR": "https://www.apple.com/tr/",
"zh-TW": "https://www.apple.com/tw/",
"uk-UA": "https://www.apple.com/ua/",
"en-UG": "https://www.apple.com/ug/",
"en-GB": "https://www.apple.com/uk/",
"en-UZ": "https://www.apple.com/uz/",
"vi-VN": "https://www.apple.com/vn/",
"en-ZA": "https://www.apple.com/za/",
"zh-CN": "https://www.apple.com.cn/"
},
"alternatesChecked": [
{
"hreflang": "ar-AE",
"url": "https://www.apple.com/ae-ar/",
"status": 200,
"returnLink": true
},
{
"hreflang": "en-AE",
"url": "https://www.apple.com/ae/",
"status": 200,
"returnLink": true
},
{
"hreflang": "en-AM",
"url": "https://www.apple.com/am/",
"status": 200,
"returnLink": true
},
"\u2026"
],
"issues": [
"no x-default"
],
"valid": false,
"scrapedAt": "2026-10-14T16:24:38+00:00"
}

Rows that could not be processed contain an error field and are not charged.

Extracted output fields

Every dataset row includes structured fields ready for spreadsheets, CRMs, and AI pipelines:

  • Fields: url, finalUrl, hreflangCount, languages, tags, alternatesChecked, issues, valid, scrapedAt
FeatureThis Actor (shawndunn/hreflang-validator)Typical alternatives
Pricing model$3 / 1,000 results, $0.00 start fee$20–$49/mo subscription or per-run start fees
Failed / error lookups$0.00 (never charged)Often billed by compute time even on failures
API keys / proxies requiredNone (works out of the box)Often requires paid third-party keys or residential proxies
AI Agent & MCP readyYes (mcp.apify.com compatible, optional defaults)Strict required schemas that reject agent calls

Pricing

Pay-per-event: $0.003 per page (= $3.00 / 1,000). Use Max results to cap spend. Apify's free plan credit covers thousands of results per month.

Integrations & API

Run on a schedule in Apify Console, call via the Apify API / Python & JS clients, or connect to Make, Zapier, n8n, Google Sheets, Slack and webhooks. Works as a tool for AI agents via Apify MCP.

Use with AI agents (MCP)

Hreflang Validator: Return Links, x is configured for zero-config AI agent tool use via the Apify MCP Server (no required-field blocking on defaulted inputs).

Streamable HTTP endpoint:

https://mcp.apify.com/?tools=shawndunn/hreflang-validator

Claude Desktop / Cursor / Windsurf mcpServers config:

{
"mcpServers": {
"apify-hreflang-validator": {
"url": "https://mcp.apify.com/?tools=shawndunn/hreflang-validator",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

Direct synchronous API call:

POST https://api.apify.com/v2/acts/shawndunn~hreflang-validator/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>

FAQ

Is this an official tool? No. It is an independent actor and is not affiliated with, sponsored or endorsed by the data source or any trademark owner named here.

Is it legal? The actor only reads publicly available data from public endpoints, without logins, and does not bypass paywalls or access controls. You are responsible for using the data in line with applicable laws (e.g. GDPR) and the source sites' terms.

Something broke? Open an issue in the Issues tab; we typically respond within 24 hours and ship fixes fast.

More tools by shawndunn