Skip to main content

Locale Cloaking Checker

Third-party service

Fetch a live URL as Googlebot and as a browser sending a different Accept-Language and diff what each gets back — title, h1, canonical, <html lang>, word count — to catch locale-adaptive serving Google never crawls, which can read as unintentional cloaking.

Input

Fetched twice server-side — once as Googlebot, once as a browser requesting the locale below.

Sent as the Accept-Language header on the second request.

Output

Cloaking risk issues
SeverityFieldIssue
No data yet
Googlebot vs. locale request
FieldGooglebot (default)Locale requestMatch
No data yet
Was this helpful?

Guides

What the Locale Cloaking Checker does

Enter a live URL and this tool fetches it twice server-side — once with Google's real Googlebot user agent and no locale preference (Googlebot's default), once with a regular browser user agent sending the Accept-Language you pick — then diffs what each gets back: title tag, meta description, canonical URL, <html lang>, h1 heading, and an approximate word count. A mismatch means the site is swapping content server-side by request locale instead of serving it from its own crawlable URL — content Google's crawler, which never sends that locale, will never see. Left unintentional, that's exactly the pattern Google's own cloaking guidance flags.

How to use it

  1. Enter the full URL of the page you want to check.
  2. Pick the locale to simulate — sent as the Accept-Language header on the second request.
  3. Click Compare Googlebot vs locale. The page is fetched twice server-side (cross-origin HTML can't be read from the browser, and spoofing a crawler's User-Agent/Accept-Language isn't something client-side JavaScript can do).
  4. Review the Cloaking risk issues table for anything to fix, and the Googlebot vs. locale request table for the full side-by-side comparison.

What gets flagged

  • Final URL, HTTP status, title, canonical URL (error) — these directly change what gets indexed and under what URL, or mean the two crawls landed on genuinely different pages.
  • <html lang>, meta description, h1 (warning) — the localized markup exists, but only reachable by sending a header Googlebot doesn't send.
  • Word count, hreflang (info/warning) — secondary signals; a large word-count gap (>15%) usually means the locale-specific content isn't reachable at a crawlable URL, and a page that declares hreflang alternates but returns byte-identical content for the requested locale gets a heads-up either way.

Why this happens

The correct pattern for multilingual content is a distinct, crawlable URL per locale (/fr/, fr.example.com, …) tied together with hreflang — Google can then crawl and index each version on its own. A site that instead swaps content on the same URL based on Accept-Language or geo-IP shows different things to different requesters of the identical URL. That's indistinguishable, from Google's side, from cloaking — even when the intent is a better user experience, not manipulation.

Scope

This compares language-negotiated adaptive serving (Accept-Language) — it doesn't have real geo-distributed egress IPs, so it can't replicate IP-geolocation-only serving (a site that only swaps content based on the requester's country, ignoring Accept-Language entirely, won't show a difference here). Both fetches read the raw HTML response — there's no headless browser rendering either side, so JavaScript-injected locale switching that happens after the initial HTML load won't show up here either.

Privacy

The URL is fetched by our server only to compare the two responses and isn't stored. Requests to private or local network addresses are blocked.

cloaking checkerlocale adaptive servinggeotargetinginternational seohreflanggooglebottechnical seo

Use it from code

From 3 credits per call

REST API

curl -X POST https://api.iotools.cloud/v1/tool/locale-cloaking-checker \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/",
    "locale": "fr-FR,fr;q=0.9"
  }'

Swap in your own key from your account. The tool's fields are the body — no wrapper.

Ask an AI agent

Use the IOTools `locale-cloaking-checker` tool (Locale Cloaking Checker) on this input:

YOUR_INPUT_HERE

Paste this at any agent connected to the IOTools MCP server, then add your input.

Love the tools? Lose the ads.

One payment clears every ad from your account, for good. No subscription, no tracking.