Technical SEO
watchvault.us · Crawlability, indexation, security headers, sitemaps
Watchvault.us is fully crawlable and fully indexable. Cloudflare sits in front of Shopify but the WAF is not challenging legitimate traffic; all major search and AI bots reach the origin. Sitemap structure is clean and split correctly. The score is held back almost entirely by transport-layer security gaps (HSTS too short for preload, HTTP/3 explicitly disabled, Content Security Policy that's a skeleton, three missing best-practice headers) plus a Shopify quirk that makes <lastmod> values worthless for crawl prioritization.
Crawler Accessibility
Verified by direct user-agent fetch. All bots return HTTP 200 with full HTML body.
| Bot | User-agent fragment | Result | Notes |
|---|---|---|---|
| Googlebot | Googlebot/2.1 | 200 | 869 KB HTML; full SSR |
| Bingbot | bingbot/2.0 | 200 | — |
| GPTBot | GPTBot/1.0 | 200 | OpenAI training crawler |
| ClaudeBot | ClaudeBot/1.0 | 200 | Anthropic crawler |
| PerplexityBot | PerplexityBot/1.0 | 200 | — |
| ChatGPT-User | ChatGPT-User/1.0 | 200 | Live ChatGPT browsing UA |
robots.txt — Standard Shopify Boilerplate
No issues blocking critical content. The full file repeats the same disallow set under User-agent: *, adsbot-google, AhrefsBot, AhrefsSiteAudit, plus partial blocks for MJ12bot, Pinterest, and a full block on Nutch.
- /policies/ — suppresses Privacy / Refund / Terms / Shipping policies from indexation. Shopify default; defensible but not optimal for $5k–$25k purchase decisions where buyers Google policies before checkout.
- /search, /cart, /account, /checkouts/, /56346738754/checkouts blocked — correct.
- /collections/*sort_by*, +, %2B, %2b permutations blocked — prevents faceted-URL bloat.
- AhrefsBot + AhrefsSiteAudit explicitly allowed with Crawl-delay: 10.
- Single sitemap declaration: https://watchvault.us/sitemap.xml (repeated under each UA group).
Sitemaps
Five sub-sitemaps, totalling 1,703 indexable URLs. Shopify's new sitemap_agentic_discovery.xml is published — a forward-looking signal that AI search vendors will prioritise over the next 6–12 months.
| Sub-sitemap | URLs | lastmod | changefreq | priority |
|---|---|---|---|---|
| sitemap_agentic_discovery.xml | 3 | 0 | 3 | 0 |
| sitemap_blogs_1.xml | 13 | 13 | 13 | 0 |
| sitemap_collections_1.xml | 47 | 47 | 47 | 0 |
| sitemap_pages_1.xml | 11 | 11 | 11 | 0 |
| sitemap_products_1.xml | 1,629 | 1,628 | 1,629 | 0 |
| Total indexable | 1,703 | |||
<lastmod> values are identicalsitemap_pages_1.xmlHTTP & Security Headers
Captured from https://watchvault.us/ HEAD response (Safari UA).
| Header | Value | Verdict |
|---|---|---|
| strict-transport-security | max-age=7889238 | ~91 days — not preload-eligible |
| x-frame-options | DENY | OK |
| x-content-type-options | nosniff | OK |
| x-xss-protection | 1; mode=block | Deprecated, harmless |
| content-security-policy | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests; | Skeleton only |
| referrer-policy | (missing) | Missing |
| permissions-policy | (missing) | Missing |
| cross-origin-opener-policy | (missing) | Missing |
| cross-origin-resource-policy | (missing) | Missing |
| alt-svc | clear | HTTP/3 explicitly disabled |
| vary | Accept | Should also include Accept-Encoding |
| nel / report-to | configured | Cloudflare NEL active |
| powered-by | Shopify | Information disclosure (low-risk) |
URL Structure & Canonicalization
- All URLs are clean: /products/<handle>, /collections/<handle>, /pages/<handle>, /blogs/news/<handle>.
- No trailing slashes, no index.html, no query-string variants in canonical URLs.
- Canonical tags present on 100 % of 100 sampled pages, all self-referential.
- Variant URLs include ?variant=<id>; canonicals point to the non-variant URL.
- No language/region subdirectories; site is US-only, English-only.
- No X-Robots-Tag header set on the homepage HTTP response. No <meta name="robots"> directives on sampled pages. Default = indexable.
JavaScript Rendering
All sampled pages render server-side. Title, headings, JSON-LD, meta tags, body content all present in initial HTML response — no JS execution required for indexable content. Shopify section blocks render server-side via Liquid; the Pixel Union "Empire" derivative theme is not a JS-only theme.
Mobile / Responsive
- Viewport meta tag present in homepage HTML
- Pixel Union "Empire" derivative theme is responsive by design
- Recently-discovered mobile breakpoint issue: .slideshow-slide__image-wrapper position behavior at the 550px breakpoint. Patched and pushed to live theme during this audit session.
Action Items
Why: HSTS max-age ~91 days; preload requires 1 year + includeSubDomains + preload. Missing Referrer-Policy, Permissions-Policy, COOP, CORP. HTTP/3 explicitly disabled (alt-svc: clear).
How — Cloudflare zone:
- HSTS to max-age=31536000; includeSubDomains; preload; submit to hstspreload.org after verifying Shopify-checkout subdomain compatibility
- Transform Rules for: Referrer-Policy: strict-origin-when-cross-origin, Permissions-Policy: camera=(), microphone=(), geolocation=(self), interest-cohort=(), Cross-Origin-Opener-Policy: same-origin-allow-popups, Cross-Origin-Resource-Policy: same-site
- Network → HTTP/3 with QUIC: ON
- Tighten CSP: add default-src, script-src, img-src, style-src directives
Owner: Site admin / DevOps · Acceptance: securityheaders.com grade A+; HSTS preload list status pending → preloaded; alt-svc header includes h3=":443".
This audit could not pull field CWV / GSC indexation / GA4 organic. Connect a GCP project with PageSpeed Insights API enabled; configure ~/.claude/skills/seo-audit/scripts/google_auth.py. Verify GSC property is verified for watchvault.us + submit all 5 sub-sitemaps.
Acceptance: Next audit pass returns CrUX p75 LCP/INP/CLS values.
Vary: Accept, Accept-EncodingXSCurrently only Vary: Accept. Cloudflare Transform Rule.
powered-by: Shopify headerXSInformation disclosure. Cloudflare Transform Rule to strip. Hardening, not a real security fix.
Currently /policies/* is robots-blocked. Counter-argument: for $5k–$25k purchases, customers Google "[brand] return policy site:watchvault.us" — being indexable would help. Discuss with client.
Cross-references: Bootstrap 3 CDN removal is filed under Performance (C6). Staging-clone unpublish is under Content Quality (C1).