
/fr/ but the French version lives at /fr-fr/, the annotation targets a page that resolves as a 404 or a redirect, and the whole language cluster gets ignored.What a subdirectory mismatch actually is
When you run localization with the subdirectory model, each language or region lives in a folder off the root domain: example.com/en/, example.com/fr/, example.com/de-de/. That is a perfectly valid setup and Google has no preference between subdirectories, subdomains, and ccTLDs. The catch is that hreflang only works if every URL you name in the annotation is a real, self resolving, indexable page. A subdirectory mismatch is what happens when the path you wrote in the hreflang tag does not match the folder the localized page actually sits in.
I see three flavors of this on audits. The first is a naming drift: the site was built with two letter language folders like /fr/, then a regional rollout moved French content to /fr-fr/, but the hreflang templates never got updated. The second is a depth mismatch, where the English URL is example.com/products/shoes/ but the tag points at example.com/de/shoes/ instead of example.com/de/products/shoes/, so the folder segment silently drops. The third is casing and trailing slash drift, where the annotation says /PT/ or omits the slash and the server answers with a redirect instead of a 200.
Why it wrecks your international SEO
Hreflang is a reciprocal, all or nothing system inside a cluster. Search engines treat the set of annotations for a page as a graph: every URL must point back at every other URL, and every one of those URLs must return a 200. The moment one target in the cluster resolves as a 404, a soft 404, or a redirect, that node is dropped, and depending on how broken the graph is, the entire cluster can be discarded. You do not get partial credit. So a single mistyped folder can quietly disable language targeting for a whole template of pages.
The visible damage is that the wrong language version outranks the right one in a given market, users land on a page they cannot read, bounce, and your conversion rate in that region tanks while your rankings look fine in aggregate. It is one of those problems that hides in plain sight because the English site is healthy and nobody is watching the German SERP.
How to detect it
You want a crawler that parses hreflang and follows every declared URL, not just eyeballs the source.
- Screaming Frog: enable Crawl and Store under Config > hreflang, run the crawl, then open the Hreflang tab. The columns you care about are Non 200 hreflang URLs and Missing Return Links. Any non 200 is almost always a path that does not match the real folder.
- Google Search Console: the legacy International Targeting report is gone, but the URL Inspection tool still shows you the resolved status of a specific alternate, which is enough to confirm a suspected mismatch page by page.
- Server logs: grep for 404s coming from Googlebot on your localized folders. A cluster of bot 404s on
/fr/when your content lives at/fr-fr/is the smoking gun. - Sitebulb: its hreflang hints flag mismatched and non indexable targets and give you the reciprocal map in one view.
How to fix it, step by step
- Pull the full list of localized folders that actually exist and return 200. This is your source of truth, not the CMS config.
- Export every hreflang annotation from the crawl and diff the declared paths against that source of truth. The mismatches jump out fast.
- Decide on one canonical folder scheme and stick to it. If your regional pages are at
/fr-fr/, every tag, every sitemap entry, and every internal link uses/fr-fr/. Do not mix/fr/and/fr-fr/. - Fix the annotation at the template level, not page by page, so the correction propagates across the whole section.
- Confirm the corrected targets return a clean 200 with no intermediate redirect, and that the return links are reciprocal.
- Regenerate and resubmit your XML sitemaps if you deliver hreflang there, and recrawl to confirm zero non 200 alternates.
Do this, not that
- Point every hreflang URL at the exact folder that serves a 200.
- Keep one consistent locale folder pattern across the whole site.
- Preserve full path depth so the folder segment never drops.
- Use absolute URLs with the trailing slash your server expects.
- Recrawl after every localization deploy.
- Mix
/fr/and/fr-fr/for the same content. - Let a tag point at a path that 301s to the real one.
- Hardcode subdirectories that a regional rollout later changed.
- Assume the CMS config matches what the server actually serves.
- Ship a new locale without diffing paths first.
What good looks like
| Signal | Mismatched | Healthy |
|---|---|---|
| Declared path status | 404 or 301 | Direct 200 |
| Folder scheme | Mixed /fr/ and /fr-fr/ | One consistent pattern |
| Return links | Broken or one way | Fully reciprocal |
| Cluster result | Dropped or ignored | Correct locale served |
FAQ
Is a subdirectory setup worse than subdomains or ccTLDs for hreflang?
My tag points at a path that 301s to the real page. Is that fine?
Does the folder have to match the language code exactly?
/fr-fr/ while the hreflang value is fr-FR. What must match is the tag path and the URL that actually serves the page.How fast will Google pick up the corrected paths?
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.







