Fossil
An initial deterministic pass across fossil.com — AI-crawler access, crawlability, schema, rendering, and semantic structure. Each item is a pass/fail call, not an opinion. A full audit follows once we engage.
Takeaways — what could block visibility
4 criticalCloudflare WAF blocks every non-browser crawler — including AI bots
Medium effortThe edge challenge returns 403 to anything that isn't a real browser (httpx, curl, DataForSEO JS-render and WebFetch all got 403; even sitemaps return the 'Just a moment…' page). Only a real Chrome rendered the site. GPTBot, ClaudeBot, PerplexityBot and Google-Extended are almost certainly challenged at the edge, so Fossil is effectively invisible to AI shopping/answer surfaces no matter how good the on-page content is. This gates everything else.
Category pagination isn't crawlable — most of the catalog is undiscoverable by link
High effortPLPs use a JS 'Load More' with no paginated links — no rel=next/prev, no ?page=, no 'View All'. Only ~13 (sometimes 0) products per category are reachable through the category path; the 922 PDPs found came from sitemaps, not category links. Deep products get minimal internal link equity and lose category-context relevance — and in the 23 locales with no sitemap they're reachable by neither links nor sitemap.
Mobile Core Web Vitals are failing
High effortLighthouse (mobile, /watches/womens-watches/) scored performance 0.33 with LCP 14.8s and TTI 15.4s on ~15 MB of total byte weight. Server TTFB is ~50ms, so the bottleneck is client-side weight and a heavy third-party tag stack (Criteo, Taboola, Outbrain) — a direct ranking and conversion drag, worst on mobile.
Product structured data is unmeasured — the highest-value open item
Medium effortThe JS crawl ran without Structured Data extraction enabled, so Product/Offer (price, availability, GTIN/MPN/brand), Review and BreadcrumbList JSON-LD couldn't be audited. This markup drives Google rich results, free Merchant listings and AI shopping selection — and it must be present in the raw HTML to be usable by AI crawlers that don't execute JS.
Technical scorecard
3 pass · 15 flagged across 18 deterministic checks. Re-audited by hand after the automated pass was blocked by Cloudflare (403). The site is fundamentally crawlable and server-rendered, but a Cloudflare WAF blocks every non-browser and AI crawler, category pagination isn't crawlable, and mobile Core Web Vitals are failing — these gate both classic and AI visibility.
Claude
CriticalCannot read the homepage
Cloudflare returns 403 to non-browser fetches; only a real Chrome rendered the site. ClaudeBot is challenged at the edge, so Fossil is effectively invisible to Claude's browsing/answers.
ChatGPT
CriticalCannot read the homepage
Same Cloudflare 403 to non-browser fetches — GPTBot / OAI-SearchBot are challenged at the edge, so Fossil can't be read on demand in ChatGPT.
Gemini
CriticalCannot read the homepage
Same Cloudflare 403 to non-browser fetches — Google-Extended is challenged at the edge, so Fossil is unreadable to Gemini on demand.
Crawler access policy published
Passrobots.txt found and reachable (3,190 bytes). Single User-agent:* group; disallows SFCC controllers and query facets — but no AI-bot directives.
Sitemap coverage is incomplete — 23 locales have none
Mediumrobots.txt declares 17 sitemap indexes, but hreflang advertises 40 locales — 23 markets have no sitemap. With category pagination broken, sitemaps are the main discovery path, so deep products in those markets are reachable by neither links nor sitemap.
Path-based facet URLs are indexable (index bloat)
Mediumrobots.txt blocks the query facets (prefn/prefv/pmin/pmax) but not path facets like /watches/color/brown/ or /watches/material/leather/ — those return 200 and are indexable, creating near-duplicate URLs that dilute crawl budget.
No canonicalisation policy for facet URLs
LowHomepage now reaches 200 via a real browser. Path-facet URLs self-index with no canonical/noindex policy; full canonical + hreflang validation is pending a complete crawl.
Cloudflare WAF blocks non-browser & headless crawlers
HighEvery non-browser fetch got 403 (httpx, curl, DataForSEO JS-render, WebFetch); sitemaps return the 'Just a moment…' challenge. Only ScreamingFrog's embedded Chrome rendered the site. This gates all crawler and AI visibility — the #1 fix.
Core content is server-side rendered
PassDataForSEO's raw (JS-off) fetch returns the full PDP copy (~847 words) and PLP SEO body (~1,055 words). Rendering is not the visibility risk — the WAF and pagination are.
No JS-dependent content for key on-page signals
PassRaw-vs-rendered diff found 0 pages where title/H1/canonical/meta appear only after JS; only 5 pages have any JS-dependent content. Content is in raw HTML — good for Google and non-JS AI crawlers.
Category pagination is not crawlable
HighPLPs use a JS 'Load More' with no crawlable pagination — no rel=next/prev, no ?page=, no 'View All'. Only ~13 (sometimes 0) products per category are reachable via links; the rest were found only via sitemaps.
Missing / weak metadata at scale
Medium27 pages missing an H1 (including the homepage); 5 duplicate titles; 7 missing meta descriptions; PDP titles run 66 chars and truncate.
Product structured data not yet measured
InfoThe JS crawl ran without Structured Data extraction enabled, so Product/Offer/Review/BreadcrumbList JSON-LD could not be audited (likely present via SFCC but unconfirmed — and must be in raw HTML for AI crawlers). Highest-value open item.
Mobile Core Web Vitals are failing
HighLighthouse mobile (PLP): performance 0.33, LCP 14.8s, TTI 15.4s, TBT 706ms, ~15 MB byte weight, ~1.84 MB unused JS. TTFB ~50ms, so the bottleneck is client-side weight + third-party tags (Criteo, Taboola, Outbrain).
Keyword-stuffed category copy (spam-policy risk)
MediumPLP SEO copy stuffs every permutation of {women's/ladies/female} × {watch/watches/timepiece} and is collapsed behind a JS 'Read More', with over-optimised exact-match anchors to thin /search?cgid facet URLs. Keyword stuffing is an explicit Google spam-policy violation. Templated across all PLPs.
Missing hreflang x-default sitewide
MediumAll 1,265 pages carrying hreflang lack an x-default — no fallback for an unmatched locale/language, so a wrong-market URL can rank in unsupported regions.
Templated malformed HTML
LowEvery sampled page (PDP + PLP) shows templated HTML errors — unterminated character references, duplicate <body> tags, stray markup declarations — on >1,500-node DOMs. Can interfere with structured-data extraction and Google’s DOM construction.
Images missing alt text
Low98 pages flagged for missing image alt/title text (homepage 213 images, PLP 215, PDP 180) — lost image SEO, accessibility, and weaker image understanding for AI surfaces.
Want to walk through the fixes together?
A 30-minute call to triage the failures, agree what blocks publishing, and slot the remediation into the content engine setup.


