ShipworkSite inspection
Hreflang

Crawlability

PaginationAre paginated pages set up right?Internal searchIs site search eating crawl budget?URL parametersAre parameters creating duplicates?Log analyserWhat does Googlebot actually crawl?Robots builderNeed a robots.txt file?Soft 404sAre pages “not found” but returning 200?JavaScriptCan crawlers see it without running JS?FreshnessIs my site quietly going stale?Robots.txtDoes robots.txt say what I think?

Indexing

Sitemap lastmodAre my sitemap dates valid?SitemapIs my sitemap actually fetchable?IndexingIs Google allowed to index my pages?CanonicalsIs Google indexing the wrong URL?Index signalsDo sitemap and index signals agree?Sitemap generatorNeed a sitemap.xml for my site?Bulk URL statusWhere does each of these URLs really land?Redirect builderNeed the redirect rules?RedirectsAre my URLs answering directly, over HTTPS?

On-page

Keyword ideasWhat are people searching for?SERP previewHow does my page look in Google?Content qualityAre your pages too thin or too alike?Image weightAre images slowing the page?CannibalizationAre pages competing with each other?On-page checkDoes the page use its target phrase?ImagesAre my images accessible and loading?Meta tag builderWhat should my title and share tags say?DuplicatesDo my pages compete for one query?

Links

Orphan pagesWhich pages can no link reach?Link graphHow deep do your pages sit?Anchor textDo links say what they point at?Outbound linksAre external links still alive?Broken linksAre internal links sending visitors nowhere?

Structured data

Rich resultsIs my markup eligible for a rich result?Structured dataIs my product schema valid?Schema coverageDo my key pages carry structured data?Social previewHow does my page look when shared?Schema vs pageDoes markup match the page price?Schema builderNeed valid JSON-LD?

International

Hreflang sitemapDo page and sitemap hreflang agree?HreflangDo my language versions link back?Hreflang builderNeed the hreflang tags?Page DoctorWhy is this page not doing well?Redirect planMy site has dead links — what redirects do I write?Sitemap diffIs anything missing from my sitemap?Robots simulatorWhat does my robots.txt actually block?Can Googlebot?Can Googlebot fetch this URL?
Every error, explainedGuides
Pricing Learn Error guides Run free audit

+1 free check

Welcome to Shipwork

Sign in free and your next check this month is on us.

Continue with GoogleContinue with email

We email you a 6-digit code. No password.

No card needed. Reports and watches follow you to any device.

Are your hreflang tags actually pointing at each other?

If you sell in more than one language or country, hreflang tells Google which version to show whom. The rule people miss is reciprocity: every version must link back to the others, or the whole cluster is discarded.

Reads the hreflang alternates on your home page and confirms the versions link back. Saved to your account if you are signed in to a paid plan.

How this check works

Shipwork reads the hreflang alternates declared on your home page, then fetches the pages they point at to confirm each one links back with its own hreflang. It flags dead alternates, missing return links and duplicate language codes: the three failures that void an international cluster.

What the hreflang checker inspects

The checker reads the alternate language declarations on your home page: each language or region code and the URL it points at. If the home page declares none, the check reports nothing, because not using hreflang is not an error. When it finds declarations, it reports how many, then looks for duplicate language values, which make a cluster invalid.

It then samples up to six of the declared alternates, requests each URL, and reads its declarations. If the alternate does not load, that is reported. If it loads but does not list the original language back, the return link is reported as missing. It does not validate the format of every code, and it reads the home page, not every page on the site.

How to read an hreflang finding

A duplicate-value warning means two declarations use the same language or region, so one of them is ambiguous. A dead-alternate warning means a URL in the set does not return a page. A no-return-link warning means reciprocity is broken: the set says these pages are alternates, but one of them does not confirm it.

A clean sample means the home page declared alternates, the sampled codes were distinct, and the sampled pages returned and linked back. It does not prove that every pair is reciprocal, that the codes are correct, or that the content is truly equivalent. Reciprocity is confirmed only on the pages sampled.

Why broken hreflang costs the right visitors

Hreflang tells a search engine which language or region a page serves, so the correct version is shown to the correct audience. When a return link is missing, the engine can ignore the pair and may show a French page to a German searcher, or the wrong regional page to a buyer who expects local pricing.

Duplicate values and dead URLs are common after a site adds a market, changes a URL structure or renames a locale folder. A dead alternate weakens the whole cluster, not just that page, because the set is read as a group. A generator can write the tags but cannot confirm they point at live, reciprocal pages.

Fix and verify the tags

For a missing return link, add the full alternate set to the page that does not link back, including a reference to itself and to every other version in the cluster. For a dead alternate, point it at the live equivalent URL or remove it from the set. For duplicate values, give each version a unique language or region code.

Publish the same set on every version, and choose one implementation, either page tags or sitemap entries, then keep it synchronized. To write the tags, use hreflang generator. To compare declarations that live in the sitemap, use hreflang sitemap check. Re-run the checker after a change to confirm the sampled pages link back.

When to use the generator or the sitemap check

Use this checker when you already publish hreflang and want to know whether the alternates resolve and link back. If you have no tags yet, start with hreflang generator. If your alternates are declared in the sitemap rather than the page head, hreflang sitemap check compares those declarations with the pages.

The guide hreflang not reciprocal covers the common return-link failure, and migrate check is useful when a domain or URL change has moved your language versions. If you serve one language and no regions, you do not need hreflang at all.

Errors this check finds, and their fixes

Questions

What is hreflang?
A tag that tells search engines which language or region a page is for, so the right version is shown to the right audience.
Why does reciprocity matter?
Hreflang must be confirmed on both sides. If page A links to page B with hreflang but B does not link back, search engines ignore the pair.
Do I need hreflang if I only sell in one language?
No. It only applies to sites serving multiple languages or regions; this check reports nothing if you do not use it.
How do I check hreflang on my website?
Run this checker on your site. It reads the alternate declarations on your home page, reports how many there are and any duplicate language values, then requests up to six of the alternate URLs and checks whether each one loads and links back. It reads the home page, so run it again after any change to a language page.
Why does hreflang have to be reciprocal?
Reciprocity is how a search engine confirms that two pages are alternates of each other. If page A declares page B but B does not declare A, the pair is unconfirmed and can be ignored. Add the full alternate set, including each page's own entry, to every version in the cluster.
Does the hreflang checker validate language codes?
It reports duplicate values, but it does not validate every code against language and region conventions. A code can be well formed but point at the wrong market, and the checker will not flag it. Review each code against current language-tag guidance, then confirm the destination page is the correct translation.
Should hreflang go in the page head or the sitemap?
Both are supported methods. This checker reads page declarations, and the sitemap check reads declarations inside a sitemap. Choose the approach your CMS or sitemap process can keep accurate, and keep every version using the same set. Maintaining both at once adds work and invites drift.

Keep reading

What this reads

  • Reads public pages from outside your network, the way a crawler does.
  • No signup, and nothing is stored on the free checks.
  • One of 83 checks across discovery, content, markup, trust and catalogue data.
83checks
0signups needed
0stored on free checks
Cool, just ran an audit and got some insights! Let’s see if I can fix them :)
Tenta Dev, @DevTenta
Whoah! this site is crazy, nothing to roast at all
Ainreek, @AinreekAI
cool as heck, tried it on my blog and the insights it gave are helpful and not bluff.
Refaat 🍉 (Mouse), @1Mouse__