returntag
Free, no signup. A page can declare its hreflang alternates perfectly and still get ignored — because the page on the other end never links back. returntag crawls the whole cluster from one URL (or a sitemap) and checks return tags, self-references, x-default, redirects, and language codes across all three declaration methods, flagging any disagreement between them — the reciprocity check Search Console's old International Targeting report used to run.
Notes: pages are fetched as Googlebot Smartphone by default (switchable, or bring your own user-agent) — some sites' bot management may challenge or block these fetches. Raw HTML only: hreflang or content injected by JavaScript needs a rendering browser and is not seen. Content-language detection covers ~30 major languages; pages in other languages simply aren't language-checked.
Example data — replace with your own, then press Validate cluster
Crawls this page's whole hreflang cluster (head tags + Link headers), then also reads the site's XML sitemaps from robots.txt and cross-checks all three sources.
Checks run from our server; we fetch the URL you enter and don't keep the results. Anonymous aggregate outcomes feed our research posts; checked domains are counted once via an anonymized hash, never stored in the clear. Anonymous run-level outcome counters may be used for aggregate research; URLs, domains, IPs, and identifiers are never included, and no statistic is released below 100 runs.
Sample report Illustrative example — worked by hand from the rules below, not a live crawl
Say your English homepage, French page, and German page all declare each other, but the
French page is missing its return tag pointing back to English. You enter the French URL,
whose <head> contains:
<!-- in the <head> of https://example.com/fr/ -->
<link rel="alternate" hreflang="en" href="https://example.com/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" /> …and returns this:
- Two of three pairs are reciprocal (green ✓) — those pairings are valid; see what reciprocal / missing / broken mean.
- One pairing is one-directional. English lists French, but French doesn't list English back — the matrix shows a yellow ▲ and the issue below names the exact page and the exact tag to add.
- One missing tag breaks the whole pairing, not just half of it — Google drops English↔French entirely until the return tag exists, which is why a map across the whole cluster matters more than checking one page at a time.
- Building the fix? The Hreflang Cluster Generator writes a self-referencing, bidirectional set so this can't happen in the first place.
Migration variant: an alternate redirects before returning
<!-- stale US annotation -->
<link rel="alternate" hreflang="en-GB"
href="https://shop.example/gb/shoes/" />
<!-- /gb/shoes/ redirects to /uk/shoes/;
the final UK page returns to the US page from a different URL -->
This is not repaired merely because the redirect reaches a live UK page. Update every
cluster member to reference the final /uk/shoes/ URL, confirm that final page
self-references, and verify that it returns the exact US alternate. The `.example` URLs are
illustrative, not a company finding.
How to use it
- Pick a mode. Matched pair fetches exactly two market counterparts;
Page URL crawls a live page's whole hreflang cluster; Sitemap URL validates the
xhtml:linkdeclarations in an XML sitemap on their own. - Paste one URL — in Page mode, any page in the cluster (e.g.
https://example.com/fr/); in Sitemap mode, the sitemap or sitemap-index URL. - Optionally change the user-agent pages are fetched as (Googlebot Smartphone by default), or in Page mode add a sitemap URL to cross-check.
- Press Validate cluster. The tool follows every alternate, fetches
each page, and cross-checks head tags,
Linkheaders, and sitemaps. - Read the stat strip, then switch between the graph and matrix views and open the Issues list — export it as CSV.
+ saves the current site or page. Use ☆ beside any saved site, page, or list to favorite it. Recent check history appears below.
Create a named list
Target filled from your local choices.
Site passport Local context for this saved site
Local data
Saved targets, named lists, and recent check summaries remain only in this browser.
Rate this tool
Compare a later cluster crawl
Download this result as a private JSON baseline, then import it after another crawl to see changed pages, reciprocity, and issues. Snapshots stay on your device unless you save the file.
International ecommerce pair mode
Compare two regional equivalents for canonical, hreflang, language, market facts, link leakage, and structured data. Identical product descriptions are recorded without being failed.
What the results mean
The stat strip counts the cluster; each pairing (edge) resolves to one of three states:
- Reciprocal pair (green ✓) — both pages list each other. This pairing is valid; Google will honour it. Redirected-but-still-reciprocal pairs count here with a note.
- Missing return (yellow ▲) — page A declares B, but B does not link back to A. The pairing is ignored until the return tag is added.
- Broken target (red ✕) — an alternate points at a URL that returns a non-200 or can't be fetched, so every hreflang aimed at it is dead.
Issues below the map carry one of three severities:
- error — breaks
the cluster: an invalid or region-only language code, a relative
href, two conflicting x-default targets, or the same locale declared twice. - error — a missing return tag, a broken alternate, or a sitemap/head/header disagreement.
- warning — a
canonical/noindex conflict or another non-fatal inconsistency. Missing self-references are notes.
The validator does not require
x-default; it is optional. - note — informational: a reciprocal pair that resolves through a redirect, a cross-domain cluster, a deprecated-but-tolerated code, or a language that doesn't match the page's detected text.
How it works
Fetching is the only server-side part. Your browser calls a small endpoint
(/api/hreflang-check) that requests one URL as the chosen crawler user-agent,
follows redirects, and returns just the extracted facts — status, self-reference,
annotations, <html lang>, Content-Language, canonical. The browser then
drives the crawl: it seeds with your URL and queues every newly referenced alternate,
fetching up to six at a time until the whole connected cluster is mapped (capped at 500 URLs).
All the validation runs client-side. Once the pages are in, it builds the cluster graph,
resolves each declared href (accounting for redirects), marks every edge
reciprocal / missing-return / broken, then layers on self-reference, x-default, language-code,
and three-source-agreement checks. In Page mode it also pulls the site's sitemaps and merges
their xhtml:link annotations so head, header, and sitemap declarations are
cross-checked against each other.
Features
- Full-cluster crawl from a single URL — follows alternates up to 500 pages, six concurrent fetches.
- Fast matched-pair mode, optional sitemap skipping, queued/active progress, per-URL timeouts, and cancellation.
- Return-tag reciprocity across all three declaration methods (head tags,
Linkheaders, sitemapxhtml:link), flagging any disagreement between them. - Interactive graph and matrix views, with a picker when the crawl finds several separate clusters.
- Self-reference, conflicting x-default, redirect-through-alternate, and separate mobile-URL (m-dot) checks. x-default itself remains optional.
- ISO 639-1 / 3166-1 language-code validation, plus content-language detection for ~30 major languages.
- Choice of crawler user-agent (Googlebot, Bingbot, YandexBot, and more) or your own; SVG/PNG graph export and CSV issue export.
- Sitemap-only mode for validating an XML sitemap's declarations without fetching pages.
Limitations
Pages are fetched as raw HTML — hreflang or content injected by JavaScript is not seen and will be reported as missing. Bot management on some sites may challenge or block the fetches. Content-language detection covers ~30 major languages; pages in other languages simply aren't language-checked. The crawl caps at 500 URLs and reads the first 20 child sitemaps, and Sitemap mode validates only what the sitemap declares (it doesn't fetch the pages, so an on-page return tag will still read as missing there).
Frequently asked questions
What is an hreflang return tag?
A return tag is the reciprocal hreflang link. If page A lists page B as an alternate, page B must list page A back — otherwise Google ignores the pairing entirely. returntag crawls every page in the cluster and checks that each declared alternate links back, so a missing return tag on any single page shows up on the map instead of silently breaking the whole set.
Does this replace Search Console’s International Targeting report?
It replaces the "no return tags" errors that report used to surface. Google retired the International Targeting report in 2022, so there is no longer a first-party place to see missing hreflang return tags. returntag runs the same reciprocity check against a live crawl of the cluster, plus x-default, self-reference, redirect, and language-code validation on top.
Why does the tool crawl other pages instead of just the one I entered?
Reciprocity can only be verified by reading both ends of every pair. When you enter one URL, returntag follows its hreflang annotations to each alternate, fetches those pages too, and keeps expanding until the whole connected cluster is mapped (up to 500 URLs). That is the only way to know whether the return tags actually exist on the other pages.
Can it check hreflang declared in an XML sitemap?
Yes. In Page URL mode it also reads the site’s sitemaps (from robots.txt, or one you supply) and cross-checks all three declaration methods — head tags, HTTP Link headers, and sitemap xhtml:link — flagging any disagreement. Sitemap URL mode validates the sitemap’s declarations on their own without fetching the pages.
Does it see hreflang added by JavaScript?
No. Pages are fetched as raw HTML (as Googlebot Smartphone by default), so hreflang tags or content injected client-side by JavaScript are not seen. If your alternates are rendered by JS, this tool will report them as missing — validate the rendered HTML separately.
Feature requests for Returntag
Upvote what you want most. New ideas can be submitted from the floating Feedback menu; requests appear here once approved, and the most-wanted rise to the top.
You won't be emailed about that request anymore.
Loading…
➕ Request a feature
New requests are reviewed before they appear here.
حول الأداة
Hreflang يمكن يكون معلن perfectly و ما زال احصل متجاهل إذا ال صفحة على ال آخر نهاية أبدًا روابط رجوع. زحف واحد كامل عنقود و تحقّق كل أعد وسم.
مجاني, من دون تسجيل. واحد صفحة يمكن يعلن الخاص به hreflang بدائل perfectly و ما زال احصل متجاهل — لأن ال صفحة على ال آخر نهاية أبدًا روابط رجوع. ال returntag - hreflang فاحص عمليات زحف ال كامل عنقود من واحد عنوان URL (أو واحد خريطة الموقع) و تحقّقات أعد وسوم, self-references, x-default, عمليات إعادة التوجيه, و لغة رموز عبر كل three تصريح أساليب, flagging أي اختلاف بين هم — ال تبادلية تحقّق بحث وحدة التحكم قديم دولي Targeting تقرير مستخدم إلى شغّل.
الميزات
- Full-cluster زحف من واحد مفرد عنوان URL — يتبع بدائل up إلى 500 صفحات, ستة متزامن يجلب.
- سريع matched-pair وضع, اختياري خريطة الموقع تخطٍّ, queued/active تقدّم, per-عنوان URL timeouts, و cancellation.
- Return-tag تبادلية عبر كل three تصريح أساليب (رأس وسوم, رابط رؤوس, خريطة الموقع xhtml:رابط), flagging أي اختلاف بين هم.
- تفاعلي رسم بياني و مصفوفة عروض, مع واحد picker عندما ال زحف finds عدة منفصل عناقيد.
- إحالة ذاتية, متعارض x-default, إعادة التوجيه-through-alternate, و منفصل mobile-عنوان URL (m-dot) تحقّقات. x-default نفسه يبقى اختياري.
- ISO 639-1 / 3166-1 language-code تحقّق, بالإضافة content-language اكتشاف من أجل ~30 رئيسي لغات.
- خيار من زاحف user-agent (Googlebot, Bingbot, YandexBot, و أكثر) أو الخاص بك الخاص; SVG/PNG رسم بياني تصدير و CSV مشكلة تصدير.
- خريطة الموقع-فقط وضع من أجل validating واحد XML خريطة الموقع's تصريحات من دون الجلب صفحات.
كيفية العمل
الجلب هو ال فقط server-side جزء. الخاص بك متصفح استدعاءات واحد صغير نقطة نهاية (/api/hreflang-check) ذلك طلبات واحد عنوان URL باعتباره ال مختار زاحف user-agent, يتبع عمليات إعادة التوجيه, و يعيد فقط ال مستخرج حقائق — حالة, إحالة ذاتية, تعليقات, <HTML lang>, Content-Language, أساسي. ال متصفح ثم يدفع ال زحف: إنه بذور مع الخاص بك عنوان URL و قوائم انتظار كل حديثًا مشار إليه بديل, الجلب up إلى ستة في واحد وقت حتى ال كامل متصل عنقود هو مُخطط (محدّد بسقف في 500 عناوين عنوان URL). كل ال تحقّق تشغيل client-side. بعد ال صفحات هي في, إنه يبني ال عنقود رسم بياني, يحلّ كل معلن href (محاسبة من أجل عمليات إعادة التوجيه), علامات كل حافة متبادل / missing-return / معطّل, ثم طبقات على إحالة ذاتية, x-default, language-code, و three-source-agreement تحقّقات. في صفحة وضع إنه أيضًا يسحب ال الموقع خرائط الموقع و يدمج الخاص بهم xhtml:رابط تعليقات لذلك رأس, رأس, و خريطة الموقع تصريحات هي متحقّق منه بالمقارنة مقابل كل آخر.
القيود
- صفحات هي مجلوب باعتباره خام HTML — hreflang أو محتوى injected بواسطة JavaScript هو ليس مرئي و سوف يكون مُبلّغ عنه باعتباره مفقود. Bot management على بعض مواقع قد challenge أو حظر ال يجلب. Content-language اكتشاف يغطي ~30 رئيسي لغات; صفحات في آخر لغات ببساطة aren't language-checked. ال زحف حدود قصوى في 500 عناوين عنوان URL و يقرأ ال الأول 20 فرعي خرائط الموقع, و خريطة الموقع وضع validates فقط ما ال خريطة الموقع يعلن (إنه لا جلب ال صفحات, لذلك واحد on-page أعد وسم سوف ما زال اقرأ باعتباره مفقود هناك).
الأسئلة الشائعة
ما هو واحد hreflang أعد وسم?
واحد أعد وسم هو ال متبادل hreflang رابط. إذا صفحة واحد قوائم صفحة B باعتباره واحد بديل, صفحة B يجب قائمة صفحة واحد رجوع — وإلا Google يتجاهل ال اقتران بالكامل. ال returntag - hreflang فاحص عمليات زحف كل صفحة في ال عنقود و تحقّقات ذلك كل معلن بديل روابط رجوع, لذلك واحد مفقود أعد وسم على أي مفرد صفحة يعرض up على ال خريطة بدلًا من بصمت كسر ال كامل مجموعة.
يفعل هذا استبدال بحث Console’s دولي Targeting تقرير?
إنه replaces ال "لا أعد وسوم" أخطاء ذلك تقرير مستخدم إلى سطح. Google متقاعد ال دولي Targeting تقرير في 2022, لذلك هناك هو لا أطول واحد الطرف الأول موضع إلى انظر مفقود hreflang أعد وسوم. ال returntag - hreflang فاحص تشغيل ال نفس تبادلية تحقّق مقابل واحد حي زحف من ال عنقود, بالإضافة x-default, إحالة ذاتية, إعادة التوجيه, و language-code تحقّق على الأعلى.
لماذا يفعل ال الأداة زحف آخر صفحات بدلًا من فقط ال واحد I مُدخل?
تبادلية يمكن فقط يكون تم التحقّق منه بواسطة قراءة كلاهما نهايات من كل زوج. عندما أنت أدخل واحد عنوان URL, ال returntag - hreflang فاحص يتبع الخاص به hreflang تعليقات إلى كل بديل, يجلب تلك صفحات أيضًا, و يحتفظ expanding حتى ال كامل متصل عنقود هو مُخطط (up إلى 500 عناوين عنوان URL). ذلك هو ال فقط way إلى يعرف ما إذا ال أعد وسوم فعليًا يوجد على ال آخر صفحات.
يمكن إنه تحقّق hreflang معلن في واحد XML خريطة الموقع?
نعم. في صفحة عنوان URL وضع إنه أيضًا يقرأ ال الموقع خرائط الموقع (من Robots.txt, أو واحد أنت تقديم) و فحوصات متقاطعة كل three تصريح أساليب — رأس وسوم, HTTP رابط رؤوس, و خريطة الموقع xhtml:رابط — flagging أي اختلاف. خريطة الموقع عنوان URL وضع validates ال خريطة الموقع’s تصريحات على الخاص بهم الخاص من دون الجلب ال صفحات.
يفعل إنه انظر hreflang مضاف بواسطة JavaScript?
لا. صفحات هي مجلوب باعتباره خام HTML (باعتباره Googlebot الهاتف الذكي بواسطة افتراضي), لذلك hreflang وسوم أو محتوى injected client-side بواسطة JavaScript هي ليس مرئي. إذا الخاص بك بدائل هي معروض بواسطة JS, هذا الأداة سوف تقرير هم باعتباره مفقود — تحقّق ال معروض HTML بشكل منفصل.