Combo Camps offers kids day camps in Whistler. The site is reachable, served over HTTPS, has a published sitemap, and links Facebook and Instagram from the footer. A phone number, an email address, and a Whistler postal address are all visible in the rendered HTML.
The remaining issues stem from Squarespace platform limitations rather than from any lack of SEO effort. Squarespace ships robots.txt with every major AI crawler blocked by default. Squarespace's password-gate widget injects <h1>Enter Password</h1> into the static HTML of every page across the site, including the homepage and the About page — a platform behaviour that cannot be overridden through normal page settings. The LocalBusiness JSON-LD Squarespace emits is a near-empty stub with no name, address, phone or geo. Lighthouse mobile measured Largest Contentful Paint at 13.3 seconds, driven primarily by Squarespace's render-blocking platform CSS bundle, which is not configurable from inside the editor.
The recommended path forward is the planned migration to a file-based site with a custom backend. The migration removes the platform-bound LCP, schema, H1-injection and AI-crawler limits in one move and bakes the Sprint 1 fixes (clean HTML, populated meta, full schema, AI-friendly robots.txt, security headers) into the build itself. The four-sprint roadmap below assumes the migration as the foundation and projects the score from 31 today to ~92 after content and authority work.
The /testimonials page contains eight named, attributed parent reviews with specific outcomes ("my son came home covered in mud and grinning") — strong first-hand experience signal. The same content carries no Review schema, so the signal is wasted on machine readers. There are no parent guides, no day-in-the-life narratives, and no first-person staff content.
Bio pages exist for four staff (Jamie, Olly, Jane, Chloe), but their content is shallow and they are not linked from any program page. Coaching credentials, first-aid certifications, and child-safety qualifications — the things parents check before booking — are not declared. Google's September 2025 Quality Rater Guidelines now require demonstrated expertise to be attached to identifiable individuals on commercial pages. They are not.
No press citations. No Tourism Whistler directory entry. No accreditation badges (BC Camping Association, the Canadian Camping Association). No Wikidata entity. The /parents-hub/certifications page implies certifications exist; they are not surfaced as named bodies with verifiable links. Facebook and Instagram are linked in the footer but not declared in the schema sameAs property.
A privacy policy and cancellation policy are published. The cookie policy exists. NAP is internally consistent where it appears. The trust collapse is the WINTER 2022/2023 H1 still rendering on the live winter pricing page in May 2026, the /covid19 page still being indexed, and the Squarespace template names ("General 1", "Reviews 1", "Gallery 3") leaking into <title> tags on five pages.
The website is reachable and indexable. HTTPS is active. The Squarespace CDN is healthy with 24-hour cache age. A sitemap is published at /sitemap.xml with 61 URLs. The site ranks for the brand name "Combo Camps" in Google. The CampBrain registration system is integrated. Facebook and Instagram profiles exist and are linked from the footer.
Three changes in how parents find local activity providers since this site was last meaningfully reviewed affect the recommended work below.
First, Google leads almost every "[activity] camp [city]" query with a Map Pack. The Google Business Profile, not the website, is the primary surface a parent first sees. Second, AI assistants (Google AI Overviews, ChatGPT, Perplexity) now answer queries like "best summer camps in Whistler for 7 year olds" inline, and they require structured data (LocalBusiness, Event, AggregateRating, FAQPage) before they will reliably name a specific provider. Third, parents shortlist from a phone in 30 seconds: ages, dates, price, and a "book now" link have to be visible above the fold or the page is rejected.
Most of the diagnosed issues are platform-bound and resolve cleanly inside the planned migration to a file-based site with custom backend. The work falls into two tracks:
• Baked into the migration build: clean HTML semantics (one H1 per page, no global password-widget leak); hand-authored titles and 18 meta descriptions; full LocalBusiness/Event/FAQ/Review schema generated from CMS data records; AI-friendly hand-authored robots.txt; security headers (HSTS, CSP, XFO, Permissions-Policy) at the host; programmatic sitemap from the route tree.
• Post-migration content and authority work: above-the-fold ages/dates/price/book card on every program page; richer /find-us/ location page; bio pages with surfaced certifications and Person schema; six evergreen parent guides; press outreach; directory citations (Tourism Whistler, Apple Business Connect, Bing Places).
Doing the SEO work as part of the migration is faster, cheaper, and more durable than retrofitting it onto Squarespace and migrating afterwards. The migrated site removes today's hard ceilings (LCP, security headers, the H1-injection widget, the AI-crawler block) at the platform level rather than working around them.
<h1>Enter Password</h1> directly into the static HTML of all 18 pages crawled, including the homepage, the About page, every program page, and every pricing page. JavaScript hides the visual overlay on most pages but the H1 stays in the DOM. Googlebot reads it as the first H1 on every page. The visual content underneath is hidden from crawlers entirely on About, Gallery, and Parents Hub.robots.txt applies a Disallow: / rule to every major AI crawler: GPTBot, ClaudeBot, anthropic-ai, OAI-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended, CCBot, plus 20 others. The site is invisible to AI search by default.robots.txt at the site root. Allow GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, anthropic-ai, PerplexityBot, Applebot-Extended, Google-Extended, CCBot. Disallow only genuine private paths (/admin/, /api/private/). Sitemap reference at the bottom. No more platform-default behaviour to reverse.
<meta name="description" content=""/>. Empty./winterpricesdates reads WINTER 2022/2023. The audit was run in May 2026 — the dates on this commercial pricing page are four years out of date./winter* URLs.
image field and "openingHours": "" (a literal empty string). Name, address, telephone, geo, priceRange, and sameAs are all absent.info@combocamps.com; Facebook and Instagram profiles in the footer). None of it is exposed to crawlers in machine-readable form. For a Whistler-area business attempting to surface in the Map Pack and AI Overviews, this is the single largest gap identified.
["LocalBusiness","SportsActivityLocation","Organization"] JSON-LD block from a single LocalBusiness data record. Fields populated: name, address (PostalAddress), geo (50.115, -122.954), telephone, email, openingHoursSpecification, priceRange, sameAs (Facebook + Instagram + GBP), founder (Jamie Grant). Renders on every page. Pre-written block in agent-schema.md; validation gate in CI via Google's Rich Results Test.
site.css blocks for 3,207 ms (111 KB)font-display: swap; properly-sized AVIF/WebP images via <picture> with explicit width/height; Meta Pixel deferred to window load; no Squarespace bundle. Realistic mobile LCP target: 1.8–2.4s, vs the current 13.3s. Core Web Vitals move from FAIL to PASS on every metric.
/springprogram. The actual page lives at /kiddycombo/springprogram. The advertised path returns HTTP 404 with no redirect./spring-camp/) with a 301 from any legacy path.
strict-transport-security: max-age=0. This is technically a header, but with a max-age of zero it instructs browsers to forget any previous HSTS commitment immediately. The site has effectively no HSTS protection.max-age=31536000; includeSubDomains; preload. All four headers Squarespace cannot set natively land in the same configuration step.
http://static1.squarespace.com/.... Facebook, LinkedIn, and Apple Messages block insecure image URLs from HTTPS pages. The result is a broken or missing preview when anyone shares a Combo Camps page on social.og:image as a 1200×630 photograph over HTTPS, with a sensible per-page default (children at camp, not the logo) and per-page overrides for programme-specific imagery. twitter:card set to summary_large_image globally. Optionally add per-page generated OG images via Cloudflare Image Resizing or Vercel OG.
/leadership: "General 1 — Combo Camps"/kiddysummer: "General 1 — Combo Camps"/testimonials: "Reviews 1 — Combo Camps"/gallery: "Gallery 3 — Combo Camps"/apply: "Combo Camps — Combo Camps" (brand name twice)/find-us/ or /location/ page with the venue address, an embedded Google Map, parking and drop-off instructions, the route from Whistler Village, and a "what to expect on the first morning" section.
agent-schema.md as the starting templates.
/llms.txt returns 404. There is no curated entity summary for AI systems. Combined with the missing LocalBusiness schema fields and empty sameAs, AI engines have no canonical entity record to ground claims against. Wikidata also has no entry for "Combo Camps" — a low-cost, high-leverage AI grounding signal that does not require Wikipedia notability./llms.txt as a static file at the root. Markdown sections: Entity summary · Programs · Location (Whistler) · Pricing · Booking · Contact. Draft in agent-geo.md.sameAs property points to a Google Business Profile. No AggregateRating widget surfaces real review data. The site provides no on-page evidence that a GBP listing exists at all.sameAs array in the LocalBusiness schema./ is absent; /home is in its place — backwards./covid19 and /parents-hub/covid19policy last updated 2022 are still in the sitemap in 2026.lastmod dates from 2021. The last bios update was 2024-06-07./applicationcomplete (a thank-you confirmation page) is indexed and in the sitemap./managerapply, /programmanager) appear in the sitemap when they should be noindex./faq (linked from the footer) and /faqs (in the sitemap) are split — they need a 301 to one canonical.priority and changefreq are populated on every entry. Google has ignored both since 2023.
sitemap.xml programmatically from the route tree. The route tree itself does not include /home (the homepage is /), /covid19, /applicationcomplete, /managerapply, /programmanager, or any of the duplicate variants. /faq and /faqs resolve to one canonical URL with a 301 from the other. lastmod is sourced from real edit timestamps in the CMS. priority and changefreq are dropped (Google ignores both).
Combo Camps is a real, operating Whistler day-camp business held back by the limits of its current platform. The fundamentals — an existing brand, social presence, and a real address and phone — are intact. What's missing is the layer of clean HTML, structured data, current content, performance, named expertise, and AI-crawler access that Google and AI engines now use to identify and rank a local service business. Most of those gaps are platform-bound and the cleanest way to close them is to migrate.
Sprint 1 — the migration to a file-based site with custom backend — bakes the largest fixes (clean H1s, populated meta, full schema, AI-friendly robots.txt, security headers) into the build itself rather than retrofitting them. Sprint 2 hits Core Web Vitals and ships the SXO and location-page work. Sprint 3 layers in the schema depth, AI surfacing, and GBP signals. Sprint 4 is the ongoing content programme and authority work that compounds. End state: a site engineered for both Google and AI search from the foundation up, projected at ~92.