Canonical overrides, rendering conflicts, and cross-domain competition
Study completed 2026-03-18 · 12 findings · 7 data sources
| Date | Event |
|---|---|
| Apr 2024 | CAM4 consolidated cam4.fr into cam4.com; introduced Accept-Language-based 302 redirects to language subdomains |
| Q3 2024 | "Duplicate, Google chose different canonical than user" appeared in Search Console |
| Dec 2025 | ~1.9M affected pages (peak) |
| Mar 2026 | ~719K affected pages (declining — Google de-indexing duplicates) |
360 crawl requests across 8 subdomains × 5 pages × 3 UAs × 3 Accept-Languages reveal a perfectly consistent pattern:
| User Agent | Total | Redirects | Rate |
|---|---|---|---|
| googlebot | 120 | 0 | 0% |
| googlebot-mobile | 120 | 0 | 0% |
| chrome | 120 | 70 | 58% |
Every localized subdomain returns 200 for Googlebot but 302 for Chrome without matching Accept-Language. Google's crawler sees localized content; its renderer sees a redirect to www.
cam4.eu operates as a completely separate hreflang cluster (43 languages) with identical content, no cross-referencing to cam4.com. Google sees 86 versions of every page.
| Subdomain | cam4.eu clicks | cam4.com clicks | eu/com ratio |
|---|---|---|---|
| German | 2,419,556 | 409,291 | 5.9x |
| French | 231,023 | 33,529,949 | 0.0x |
| Italian | 178,051 | 29,760,520 | 0.0x |
| English | 5,092,418 | 102,236,880 | 0.0x |
German traffic strongly prefers cam4.eu (5.9× more clicks). Google overrides cam4.eu/female → www.cam4.com/female (confirmed by URL Inspection API).
URL Inspection API results (19 URLs, ground truth from Google):
| URL | Google's Decision | Google Canonical |
|---|---|---|
| https://it.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://it.cam4.com/male | OVERRIDE → www | https://www.cam4.com/male |
| https://it.cam4.com/ | Correctly indexed | https://it.cam4.com/ |
| https://fr.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://fr.cam4.com/ | Correctly indexed | https://fr.cam4.com/ |
| https://de.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://de.cam4.com/ | Correctly indexed | https://de.cam4.com/ |
| https://es.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://es.cam4.com/ | Correctly indexed | https://es.cam4.com/ |
| https://pt.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://nl.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://pl.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://ro.cam4.com/female | OVERRIDE → www | https://www.cam4.com/female |
| https://www.cam4.eu/female | OVERRIDE → www | https://www.cam4.com/female |
| https://de.cam4.eu/female | OVERRIDE → www | https://www.cam4.com/female |
| https://www.cam4.com/female | Correctly indexed | https://www.cam4.com/female |
| https://www.cam4.com/ | Correctly indexed | https://www.cam4.com/ |
| https://it.cam4.com/tags/female/squirt | Correctly indexed | https://it.cam4.com/tags/female/squirt |
| https://es.cam4.com/tags/female/squirt | Correctly indexed | https://es.cam4.com/tags/female/squirt |
Pattern: Directory pages (/female, /male) are always overridden. Homepages and tag pages are correctly indexed. This implicates content similarity — directory pages show identical performer thumbnails across all subdomains.
Headless Chrome (identical to Google's Web Rendering Service) results:
| Page | Redirected? | Lang | Canonical |
|---|---|---|---|
| it-female-chrome | YES → www | en | https://www.cam4.com/female |
| fr-female-chrome | YES → www | en | https://www.cam4.com/female |
| de-female-chrome | YES → www | en | https://www.cam4.com/female |
| es-female-chrome | YES → www | en | https://www.cam4.com/female |
| www-female-chrome | No | en | https://www.cam4.com/female |
| it-homepage-chrome | YES → www | en | https://www.cam4.com/ |
| eu-female-chrome | No | en | https://www.cam4.eu/female |
Every localized subdomain redirects in headless Chrome. This definitively proves Google's renderer triggers the 302.
Daily GSC data reveals a sudden, catastrophic drop in it.cam4.com traffic on Feb 26-27:
| Date | it.cam4.com | www.cam4.com | Event |
|---|---|---|---|
| Feb 25 | 128,405/day | 99,445/day | Normal |
| Feb 26 | 92,836/day | 168,841/day | Drop begins |
| Feb 27 | 45,834/day | 196,712/day | Cliff — traffic shifts to www |
| Mar 1-15 | ~46K/day | ~210K/day | New steady state |
Italy-specific. No other subdomain was affected. fr, es, nl all continued normally.
| Page | Before | After | Change |
|---|---|---|---|
it.cam4.com/ (homepage) | 94,168/day | 13,730/day | -85% |
it.cam4.com/tags/female/blowjob | 412/day | 101/day | -76% |
it.cam4.com/female/italy | 24,904/day | 25,135/day | +1% |
it.cam4.com/female/italian | 1,706/day | 1,797/day | +5% |
The homepage lost 85%. Geo-filtered pages with Italy-specific content (/female/italy) were unaffected — reinforcing that Google overrides pages with identical content but preserves differentiated ones.
| Page (from Italy) | Before | After | Change |
|---|---|---|---|
www.cam4.com/ | 4,208/day | 79,672/day | +1,793% |
The traffic shifted directly to www.cam4.com/ — confirming this is a canonical override, not a traffic loss.
The branded query "cam4" was almost entirely responsible:
| Query | Before (it.cam4.com) | After | Change |
|---|---|---|---|
| cam4 | 101,095/day | 20,814/day | -79% |
| cam 4 | 6,655/day | 6,063/day | -9% |
| porno live | 608/day | 575/day | -5% |
| cam porno | 525/day | 508/day | -3% |
80K branded clicks/day shifted from it.cam4.com to www.cam4.com. Unbranded queries were barely affected.
| Metric | Before (Feb 20-25) | After (Mar 1-15) | Change |
|---|---|---|---|
| it.cam4.com (all pages) | 123,538/day | 46,398/day | -77,140/day |
| www.cam4.com (from Italy) | 102,804/day | 210,409/day | +107,605/day |
| Combined total | 226,342/day | 256,807/day | +30,465/day (+13.5%) |
www gained more than it.cam4.com lost — net +30K clicks/day (+13.5%). Total Italian click volume actually increased. But Italian users now land on an English-language page, degrading UX and likely conversion.
URL Inspection confirms all it.cam4.com pages are correctly indexed. The daily data for "cam4" query shows what's driving the shift:
| Date | it.cam4.com pos | it.cam4.com CTR | www.cam4.com pos | www.cam4.com CTR |
|---|---|---|---|---|
| Feb 25 | 1.0 | 13.7% | 3.4 | 4.3% |
| Feb 26 | 1.0 | 11.2% | 2.6 | 11.1% |
| Feb 27 | 1.0 | 5.1% | 2.4 | 12.8% |
| Mar 14 | 1.0 | 5.7% | 2.0 | 17.2% |
it.cam4.com stayed at position 1 but CTR collapsed from 14% → 5%. Google changed how it displays branded "cam4" results in Italian SERPs — likely giving www expanded sitelinks or a richer presentation that draws clicks. The net +13.5% total gain confirms increased overall engagement, but shifted to the English www domain. Active, ongoing.
Tested via residential proxy IPs from 6 countries using Playwright (no Accept-Language header sent):
| Source IP | URL | Result |
|---|---|---|
| US | www.cam4.com/female | 200 (no redirect) |
| Italy | www.cam4.com/female | 200 (GeoIP does NOT redirect to it.cam4.com) |
| Italy | it.cam4.com/female | 302 → www (even from Italian IP!) |
| France | fr.cam4.com/female | 302 → www |
| Germany | de.cam4.com/female | 302 → www |
| Germany | www.cam4.eu/female | 200 (cam4.eu never redirects) |
| Japan | www.cam4.com/female | 200 (no redirect) |
| Brazil | pt.cam4.com/female | 302 → www |
An Italian user on a residential Italian IP visiting it.cam4.com still gets redirected to www if their browser doesn't send Accept-Language: it. The redirect is 100% Accept-Language-driven — GeoIP plays no role.
France (-67.5%) declined dramatically while Belgium (+4.4%) and Switzerland (+7.9%) grew on fr.cam4.com. The French traffic decline is almost entirely due to age verification laws, not canonical issues.
CAM4 has localized subdomains for each language (e.g., ro.cam4.com for Romanian). Since each country's population primarily speaks their local language, Google should serve the matching subdomain. In 9 of 25 countries, users see a version that doesn't match their language.
| Country | Expected (local language) | Google Serves | Status | Clicks |
|---|---|---|---|---|
| ITA | it.cam4.com | it.cam4.com | Correct | 7,757,723 |
| BRA | pt.cam4.com | pt.cam4.com | Correct | 5,311,479 |
| ARG | es.cam4.com | es.cam4.com | Correct | 3,156,680 |
| ESP | es.cam4.com | es.cam4.com | Correct | 2,548,875 |
| FRA | fr.cam4.com | fr.cam4.com | Correct | 1,933,119 |
| DEU | de.cam4.com | www.cam4.eu | MISMATCH | 919,414 |
| COL | es.cam4.com | es.cam4.com | Correct | 788,333 |
| USA | www.cam4.com | www.cam4.com | Correct | 755,054 |
| PRT | pt.cam4.com | pt.cam4.com | Correct | 689,842 |
| GBR | www.cam4.com | www.cam4.com | Correct | 406,240 |
| MEX | es.cam4.com | es.cam4.com | Correct | 347,381 |
| NLD | nl.cam4.com | nl.cam4.com | Correct | 312,086 |
| CAN | www.cam4.com | www.cam4.com | Correct | 247,504 |
| GRC | el.cam4.com | www.cam4.com | MISMATCH | 155,451 |
| ROU | ro.cam4.com | www.cam4.com | MISMATCH | 128,097 |
| POL | pl.cam4.com | www.cam4.com | MISMATCH | 125,320 |
| JPN | ja.cam4.com | ja.cam4.com | Correct | 105,163 |
| AUS | www.cam4.com | www.cam4.com | Correct | 90,740 |
| SWE | sv.cam4.com | sv.cam4.com | Correct | 68,268 |
| TUR | tr.cam4.com | www.cam4.com | MISMATCH | 56,107 |
| HUN | hu.cam4.com | www.cam4.com | MISMATCH | 38,544 |
| BGR | bg.cam4.com | bg.cam4.com | Correct | 35,251 |
| CZE | cs.cam4.com | www.cam4.com | MISMATCH | 21,173 |
| RUS | ru4.cam4.com | www.cam4.com | MISMATCH | 19,776 |
| KOR | ko.cam4.com | www.cam4.com | MISMATCH | 2,635 |
Redirects are not inherently problematic. Stripchat uses redirects with 32 languages successfully. The difference is which direction the redirect goes.
| Stripchat | CAM4 | |
|---|---|---|
| www → localized subdomain | Yes — www detects Accept-Language and redirects users toward the correct language | No — www never redirects |
| Localized subdomain → www | Never — localized URLs are stable endpoints that always serve their language | Yes — bounces users away from the correct language if Accept-Language doesn't match |
| Scenario | stripchat.com (www) | ita.stripchat.com |
|---|---|---|
| Googlebot, no AL | 200 (English) | 200 (Italian) |
| Googlebot, Italian AL | 302 → ita.stripchat.com | 200 (Italian) |
| Chrome, no AL | 200 (English) | 200 (Italian) |
| Chrome, English AL | 200 (English) | 200 (Italian) |
ita.stripchat.com never redirects away. Google can crawl and render it reliably.
| Scenario | www.cam4.com | it.cam4.com |
|---|---|---|
| Googlebot, no AL | 200 (English) | 200 (Italian) |
| Chrome, Italian AL | 200 (English) | 200 (Italian) |
| Chrome, no AL | 200 (English) | 302 → www.cam4.com |
| Chrome, English AL | 200 (English) | 302 → www.cam4.com |
it.cam4.com only works for browsers with Italian Accept-Language. Google's WRS (Chrome-based, no AL) gets bounced to www — conflicting with what Googlebot saw.
| Property | Chaturbate | Stripchat | CAM4 |
|---|---|---|---|
| Languages | 13 | 32 | 43 |
| Localized subdomain stability | Always 200 | Always 200 | 302 for non-matching AL |
| UA consistency | Same for all | Same for all | Different for Googlebot vs Chrome |
| Redirect direction | None | www → localized | localized → www |
| Vary header | Yes | No | No |
| Content-Language header | Yes (it) | No | No |
| Site | Languages | Method | Redirect on AL mismatch? | hreflang | Vary header |
|---|---|---|---|---|---|
| CAM4 | 43 | Subdomains | 302 for Chrome, 200 for Googlebot | Yes (HTML) | No |
| Chaturbate | 13 | Subdomains | No redirects ever | Yes (HTML) | Yes |
| Stripchat | 32 | Subdomains | www 302s to localized when AL matches; localized never redirects (all UAs consistent) | Yes (HTML) | No |
| BongaCams | 19 | Subdomains | Blocks all search indexing — non-organic strategy | ||
Option A (Chaturbate): No redirects anywhere. All localized subdomains always serve 200 in their language. Use a JS banner to suggest switching. Simplest.
Option B (Stripchat — recommended): Reverse the redirect direction. Make www.cam4.com redirect to localized subdomains when Accept-Language matches. Make localized subdomains always return 200 — they never redirect away. Preserves the language routing UX while making localized URLs stable. Must be consistent for all UAs.
Option C: Redirect all UAs consistently from localized → www (including Googlebot). Google only indexes www. Loses localized URLs from the index entirely.
Do NOT continue the current approach of redirecting localized subdomains to www for some UAs but not others.
Recommended: Add cross-domain canonical from every cam4.eu page to cam4.com:
<link rel="canonical" href="https://www.cam4.com/female" />
cam4.eu continues to work for users but stops competing in search.
Vary: Accept-Language, Cookie and Content-Language: it on every response.
298 URLs per subdomain sitemap, zero hreflang annotations. Add <xhtml:link rel="alternate" hreflang> entries.
42 error-no-profile pages in the canonical override report. Return 410 or add noindex.
Many of the 43 languages have <1,000 monthly clicks. Consolidating low-traffic languages reduces hreflang cluster complexity.
| # | Action | Impact | Effort |
|---|---|---|---|
| 1 | R1: Fix redirect consistency | Resolves primary cause | Server config |
| 2 | R2: cam4.eu canonical to cam4.com | Eliminates cross-domain competition | HTML template |
| 3 | R3: Vary + Content-Language headers | Improves Google's understanding | Server config |
| 4 | R4: hreflang in sitemaps | Redundant reliable signal | Sitemap generator |
| 5 | R5: Fix error pages | Saves crawl budget | Quick fix |
| 6 | R6: Reduce language count | Simplifies cluster | Business decision |
Generated 2026-03-18 · Data: GSC API, URL Inspection API, Playwright, Oxylabs residential proxy, crawl probe (360 requests)