Hreflang Checker: Bulk Pages, Return Links, x-default avatar

Hreflang Checker: Bulk Pages, Return Links, x-default

Pricing

$3.00 / 1,000 page checkeds

Go to Apify Store
Hreflang Checker: Bulk Pages, Return Links, x-default

Hreflang Checker: Bulk Pages, Return Links, x-default

Audit hreflang on many pages at once: invalid language and region codes, missing self-reference and x-default, alternates that do not link back, dead or redirecting alternates and canonical conflicts.

Pricing

$3.00 / 1,000 page checkeds

Rating

0.0

(0)

Developer

Luigi Fiano

Luigi Fiano

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Audit the hreflang tags of hundreds of pages in one run. For every page you get the tags it declares, whether it references itself, whether it has an x-default, and a plain list of problems. With return-link checking on, every alternate is opened too, so you see which language versions are dead, redirect, or forget to link back.

Hreflang only works when the tags are reciprocal and the codes are valid. One wrong code (en-UK instead of en-GB) or one missing return link and search engines can ignore the whole set.

What it is for

  • International SEO audits: check every language version of a site, not one page at a time.
  • Before and after a launch or migration: confirm that new language folders all point at each other.
  • Monitoring: schedule it weekly with onlyProblems and get only the pages that broke.

What it checks

  • Tags in the HTML <head> and in the HTTP Link header.
  • Valid codes: ISO 639-1 language, optional script, optional ISO 3166 region or UN M.49 area (es-419), and x-default. Common mistakes are named: en_us (underscore), en-UK (use en-GB), en-EU, unknown languages.
  • Self-referencing hreflang and x-default present.
  • The same code pointing to two different URLs, missing href, relative URLs.
  • Canonical pointing to another URL (hreflang on a non-canonical page is usually ignored).
  • For each alternate: live (status), no redirect, links back to the page, and its own canonical is itself.
  • Input URLs that redirect are reported.

Input

FieldWhat it doesDefault
urlsOne page URL per linerequired
checkReturnLinksOpen every alternate and verify it links backtrue
maxAlternatesMax alternates opened per page50
onlyProblemsOutput only pages with an issuefalse
concurrency, timeoutSecs, maxRetriesSpeed and resilience5, 20, 2

Example:

{ "urls": ["https://www.example.com/en/", "https://www.example.com/it/"] }

Each URL is fetched once per run, even when many pages list it as an alternate.

Output

One row per page:

{
"url": "https://www.example.com/en/",
"finalUrl": "https://www.example.com/en/",
"status": 200,
"canonical": "https://www.example.com/en/",
"hreflangCount": 3,
"hasSelfReference": true,
"hasXDefault": false,
"alternates": [
{ "hreflang": "en", "href": "https://www.example.com/en/", "source": "html", "status": 200, "returnLink": true, "issue": null },
{ "hreflang": "it", "href": "https://www.example.com/it/", "source": "html", "status": 200, "returnLink": false, "issue": "no return link to this page" },
{ "hreflang": "en-UK", "href": "https://www.example.com/uk/", "source": "html", "status": 404, "returnLink": null, "issue": "status 404" }
],
"ok": false,
"issues": [
"invalid hreflang \"en-UK\": region \"UK\" is not ISO 3166, use \"GB\"",
"no x-default",
"alternate it: no return link to this page",
"alternate en-UK: status 404"
],
"checkedAt": "2026-10-26T00:00:00.000Z"
}

A SUMMARY record in the key-value store counts pages checked, ok, with issues, without hreflang, with missing return links, with invalid codes and without x-default.

Pricing

Pay per result: $0.003 per page delivered to the dataset ($3 per 1,000 pages), plus the small Apify platform usage of the run. Alternates opened for return-link checks are not charged as rows. With onlyProblems on, clean pages are not delivered and not charged.

Notes

  • It reads only the public HTML of the pages you provide and of the alternates they list. No login, no cookies, no personal data.
  • Hreflang declared only in XML sitemaps is not read in this version; tags in the HTML head and the Link header are.
  • JavaScript-injected tags are not executed: the check sees what a crawler sees in the raw HTML.