SEO & AI Search Audit 5 June 2026

Jack's Ski Club

jacksskiclub.com
Stubai Glacier, Austria & SilverStar, Canada
Squarespace
Adult ski camps & online coaching
Coaches incl. a two-time Olympian
53
out of 100
Grade C

Audit Summary

Jack's Ski Club has the two things that are hardest to build: genuinely good content and rare coaching authority. The camp pages carry real dates, prices, itineraries and Stubai/Innsbruck detail; the coaching roster includes a two-time Olympic racer and World Cup-level coaches; and the free Skier Levels, Ski IQ, technique and fitness libraries are exactly the answer-shaped material that both Google and AI engines reward. The raw materials are strong.

What is broken is everything around that content — the machine-readable layer. The business cannot decide what it is called: the brand says "Jack's Ski Club" but every schema block, the Open Graph tag and most of the copy say THESKICLUB.ORG, with two email domains and a placeholder user@domain.com left in the markup. There is effectively no useful structured data — no camp dates, prices, FAQs or coaches marked up — the five revenue pages have no H1, eleven pages have no meta description, and the sitemap is ~64% junk.

Almost none of this is a content problem — it is a packaging and hygiene problem, which makes it unusually recoverable. A focused first week lifts the score by roughly thirteen points; a focused month takes it from 53 to approximately 88.

Technical SEO62
Weight: 22%
Content & E-E-A-T58
Weight: 23%
On-Page SEO (SXO)54
Weight: 20%
Schema / Structured Data18
Weight: 10%
Performance (CWV, lab)68
Weight: 10%
AI Search Readiness41
Weight: 10%
Images & Visual48
Weight: 5%
Local / Entity SEO24
Supporting · rolls into Technical
Sitemap & Architecture36
Supporting dimension
Citability (AI quote-ability)72
Bright spot · rolls into AI
What Jack's Ski Club Sells
The offering, and the searches it needs to win — the lens for every recommendation below

Austria camps — Stubai Glacier

Camp 1 · Nov 29–Dec 5 2026 · from €2,700
Camp 2 · Dec 5–12 2026 · from €2,950

Performance Elite + Technical Progression camps, 20 min from Innsbruck. Luxury full-board, airport transfers, GS race courses, video analysis. The flagship product.

Canada camps — SilverStar

Performance Elite + Technical Progression

The same small-group, video-analysis coaching model run on Canadian snow — plus adult performance camps for the North American market.

Membership

$20 / year

30+ hours of ski-technique video, 70+ at-home workouts & 28-day plans, brand discounts and early camp access. The year-round, low-friction entry product.

Private coaching

In-person & online

Online video analysis and customised improvement programmes — a growing, under-served search demand the site barely addresses today.

Who it is for & what they want to rank for. The target skier is a strong-intermediate to expert adult (Skier Levels 4–12, typically 35–65) who can ski parallel confidently on red runs. That maps to a clear search target list: ski camps Austria, ski camps Canada, Stubai Glacier ski camp, adult ski camp / ski improvement camp, ski race / performance training camp, online ski coaching & video analysis, and informational queries like how to carve and what ski level am I that the free libraries already answer. In AI search the prize queries are "best adult ski improvement camp in Austria/Europe", "ski race training camp for adults", and "Stubai Glacier ski camp" — all winnable, and all currently blocked by the same entity-and-schema gap.
Brand-name conflict
267 vs 49
theskiclub.org vs jacksskiclub.com in markup
Useful schema for AI
0
no Event, Course, FAQ, Person, Review
Revenue pages with no H1
5
both Austria + both Canada + coaching
Pages missing meta description
11
incl. memberships & pricing
Sitemap URLs
191
only ~25 real pages; rest is bloat
Server response (TTFB)
~270ms
Squarespace CDN, HTTP/2, gzip
user@domain.com placeholder
36×
left live in page markup
Specialist agents run
7
parallel, curl-verified ground truth
E-E-A-T Assessment
Experience, Expertise, Authoritativeness, Trustworthiness. Combined ~58/100 — strong content, broken signals.
Experience78 / 100

The strongest dimension. Camp pages carry genuine first-hand operator detail — real 2026 dates, €/CAD pricing, the Stubai Glacier hotel, Innsbruck transfers, daily on-snow structure. The technique and fitness libraries are filmed first-hand, some with a two-time Olympian. This is the brand's moat; it simply is not packaged for machines.

Expertise72 / 100

Real, rare credentials: a two-time Olympian & World Cup medalist (Mike Janyk), a former Japanese World Cup / Olympic SL team coach, and multiple BASI Level 4 instructors. But five of the six coach cards are headed only "COACH" with no name, no Person schema, and no sameAs to Olympic/FIS profiles — so the expertise can't be attributed.

Authoritativeness41 / 100

The entity is unresolvable. The brand name conflicts across the site (Jack's Ski Club vs THESKICLUB.ORG), the founder's headline credential is told four different ways, and there are no authoritative external links (Wikipedia, FIS, press) declared in schema. Google's Knowledge Graph cannot consolidate a single business.

Trustworthiness38 / 100

The weakest dimension. Two email domains, a typo'd phone number across the camp pages, a user@domain.com placeholder live 36 times, a stale 2025 pricing page still indexed, an empty Reviews page that claims "all 5-star Google reviews" with no review schema, and a broken LocalBusiness block whose hours read as permanently closed.

Search & SEO Visibility
How Jack's Ski Club shows up in traditional Google search today — and what is winnable

Current foundations

The hosting fundamentals are sound. Every redirect vector (http→https, www→non-www) resolves in a single clean 301 hop, HSTS is enabled, the homepage canonical and title are correct, the site is fully server-rendered, and Squarespace delivers a ~270ms server response over HTTP/2 with gzip. The camp pages are deep (1,300–1,550 words) and more specific than most competitors — the content layer is genuinely competitive.

Why the site under-ranks despite good content

Three structural problems cap traditional search visibility, and all three are fixable without writing new content.

1. The entity is ambiguous. Google ranks businesses, not just pages. When the brand name, the schema name, the Open Graph tag and the contact emails disagree about whether this is "Jack's Ski Club" or "TheSkiClub.org", Google cannot consolidate authority onto one entity — so links, reviews and mentions are split and diluted. This is the single biggest ranking ceiling on the site.

2. The money pages are mis-signalled. The five pages that hold the dates and prices — both Austria camps, both Canada camps and private coaching — carry no H1, so Google has no primary topic signal exactly where it matters. Titles are duplicated and templated ("Performance Ski Camps" is used twice; the FAQ wears a camp title; two pages are literally "Jack's Ski Club | Jack's Ski Club"), and eleven pages have no meta description, ceding the SERP snippet to Google's guesswork.

3. The pages cannibalise each other. Four pages compete for "ski camps Austria" (europe-camp-type, the-camps and the two deep Austria pages), and a parallel set competes for Canada. Thin 360–430-word hub pages dilute the authority of the deep 1,500-word pages that should win. Collapsing each cluster to one canonical page concentrates the ranking signal.

Target queryWinnable?Best page todayAction
Stubai Glacier ski campHighaustria-performance-elite-campLow-competition, high-value, you own the content. Put "Stubai" in the H1, title and opening sentence.
ski camps AustriaHighaustria-performance-elite-camp (1,455w)The natural winner. Add an H1 + geo title; 301 the thin europe-camp-type hub into it to kill the split.
ski camps CanadaHighcanada-performance-elite-camp (1,289w)Make this THE Canada page; repurpose/301 the thin canada-camp-type-1.
adult ski camp / improvement campMediumthe-camps + adult performance pageMake /the-camps a true hub targeting "adult ski camps", linking down to the country pages.
online ski coaching / video analysisMediumprivate-coaching (275w, 0 H1)Under-served, growing demand and almost no real page. Build it out — an easy capture.
improve ski technique / how to carveHighski-iq, ski-technique libraryAlready answer-shaped. Add HowTo structure + internal links down to membership & camps.
AI Search Visibility
How ChatGPT, Perplexity, Claude and Google AI Overviews see the site today. Score 41/100.

The short version

The content is genuinely AI-citable — the FAQ, the 12-level Skier Levels rubric and the Ski IQ glossary are exactly the self-contained, answer-shaped passages LLMs love to quote. AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) are all allowed, so nothing is blocked. But two things stop the engines recommending the brand: there is no machine-readable structure (zero Event, Course, FAQ, Person or Review schema, and no llms.txt), and the entity is ambiguous — an AI reading the page cannot decide whether the business is "Jack's Ski Club" or "theskiclub.org", so it hedges or omits the citation entirely. Both are recoverable, and the fixes are mostly configuration.

Citability72 / 100

The bright spot. FAQ, Skier Levels and Ski IQ are direct, self-contained answers an LLM would quote — capped only by the entity noise and missing schema around them.

Structural Readability34 / 100

The five revenue pages have 0 H1; ski-news has 13 H1s and ski-iq has 3. The camp dates and prices live in styled <div>s with no heading anchor, so they read as ambient text.

Multi-Modal Content48 / 100

A deep video inventory (30+ technique, 70+ workout clips) and good alt-text discipline — but videos are "WATCH VIDEO" links with no transcripts and no VideoObject schema, so they're invisible to AI.

Authority & Brand Entity22 / 100

The core blocker. info@theskiclub.org appears 267× vs 49× for the real domain; schema, og:site_name and copy all conflict; an Olympian's authority is never attached to a named Person. AI can't cite what it can't resolve.

Technical Accessibility38 / 100

All AI bots allowed (good), but /llms.txt returns 404, structured data is effectively zero, and a 64%-junk sitemap wastes the crawl budget AI bots spend on the pages that matter.

The biggest quick win: publish an llms.txt file

An llms.txt is a single plain-text file at the site root that hands AI assistants a curated, machine-readable summary of who the brand is, what it sells, and where the canonical pages live — so when someone asks ChatGPT, Perplexity or Claude "what's the best adult ski camp in Austria?", the engine can ground its answer on Jack's Ski Club's own facts in one fetch instead of guessing from scattered third-party pages. Right now jacksskiclub.com/llms.txt returns 404. With real camp dates, prices and a star coaching roster, a curated llms.txt is unusually high-leverage here — but pick one canonical brand name first so every line agrees.

/llms.txt — starter template (use the real 2026 data)
# Jack's Ski Club

> Jack's Ski Club (jacksskiclub.com) runs adult performance & technical
> ski camps in Austria (Stubai Glacier, near Innsbruck) and Canada
> (SilverStar), plus a $20/yr online ski-improvement membership and
> private video-analysis coaching. For strong-intermediate to expert
> adult skiers. Coaching led by BASI Level 4 instructors, including
> Olympians and World Cup-level coaches.

## Ski Camps — Austria (Stubai Glacier)
- Camp 1: Nov 29 – Dec 5 2026 — from €2,700 / ~CAD 4,350
- Camp 2: Dec 5 – 12 2026 — from €2,950 / ~CAD 4,800
- Includes luxury full board, Innsbruck transfers, daily coaching,
  video analysis. Excludes lift pass, rentals, flights, insurance.

## Ski Camps — Canada (SilverStar)
- Performance Elite + Technical Progression adult camps.

## Membership
- $20/year: 30+ hrs technique video, 70+ workouts, brand discounts.

## Coaches
- Includes Mike Janyk — two-time Olympian & World Cup medalist.

## Key pages
- Camps: https://jacksskiclub.com/the-camps
- Coaches: https://jacksskiclub.com/coaches
- FAQ: https://jacksskiclub.com/faq

## Contact
- info@jacksskiclub.com  ·  +1 (604) 203 4429

Note: Squarespace will not serve an arbitrary root .txt by default — publish via a URL mapping / redirect and confirm it returns HTTP 200 with text/plain.

AI query the brand could winStatus todayWhat unlocks it
"Best adult ski improvement camp in Austria / Europe"BlockedResolve the entity, add Event/Course + Offer schema, name the coaches.
"Ski race training camp for adults"BlockedThe GS-course content exists — mark it up and attach it to a named, credentialed entity.
"Stubai Glacier ski camp"Closellms.txt + camp Event schema; you own the only first-hand content for this.
"Online ski technique membership / coaching"BlockedBuild the coaching page, add Product/Offer for the membership, publish llms.txt.
"What ski level do I need for a ski camp?"CloseSkier Levels + FAQ are perfect; add FAQPage + DefinedTermSet schema.
The Structured-Data Opportunity
Schema scores 18/100 — the single largest gap, and the one that powers both rich results and AI extraction

What exists today, and why it hurts

The only structured data on the site is the Squarespace default — a WebSite and a LocalBusiness block — and both are broken. The name is THESKICLUB.ORG, the description is empty, the LocalBusiness has no address, no geo, no priceRange and no sameAs, the image URL is truncated, and the opening hours read Mo 00:00-00:00 ... Su 00:00-00:00 — which a parser interprets as permanently closed. Fixing the Business Information once in Squarespace repairs the defaults across all ~191 pages instantly; then the high-value types get added via per-page Code Injection. The camps are the prize: they have real dates and prices and zero markup.

Example: Event + Offer JSON-LD for the Austria camp (paste per camp page)
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Performance Ski Camp — Stubai Glacier, Austria (Camp 1)",
  "startDate": "2026-11-29",
  "endDate": "2026-12-05",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Stubai Glacier",
    "address": "Stubaier Gletscher, Tyrol, Austria"
  },
  "organizer": {
    "@type": "Organization",
    "name": "Jack's Ski Club",
    "url": "https://jacksskiclub.com"
  },
  "offers": {
    "@type": "Offer",
    "price": "2700",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock",
    "url": "https://jacksskiclub.com/austria-performance-elite-camp"
  }
}

The same pattern applies to Course/Offer for the membership, Person for each named coach (with sameAs to Olympic/FIS profiles), FAQPage for /faq, and AggregateRating once real reviews are embedded on the Reviews page.

Critical & High Issues
Issues blocking or significantly impacting rankings and AI visibility. Tap to expand.
The business cannot decide what it is called Critical
The display brand is Jack's Ski Club, but the schema name, the og:site_name, and most body copy say THESKICLUB.ORG. Across the saved pages, info@theskiclub.org appears 267 times versus 49 for info@jacksskiclub.com; a third address (bookings@jacksskiclub.com) and a literal user@domain.com placeholder (36 times) are also live. Google ranks entities, not just pages — with two competing names it cannot consolidate links, reviews and mentions onto one business, and AI engines cannot cite a brand they cannot resolve. This single issue caps both the Authoritativeness and AI scores.
How to fix (half a day, highest leverage on the site)
Choose ONE canonical name (recommended: "Jack's Ski Club"). Update it in Squarespace Business Information (fixes schema + og everywhere at once), do a find-and-replace across page copy, retire the second email domain (301/forward theskiclub.org to the canonical domain), and remove the user@domain.com placeholder. Then make every social profile and the GBP match.
Effectively zero useful structured data Critical
Only the Squarespace-default WebSite + LocalBusiness blocks exist, and both are broken (wrong name, empty description, no address/geo/priceRange, opening hours that read as permanently closed, truncated image). There is zero Event, Course, Product, FAQPage, Person or AggregateRating schema anywhere — despite the camps having real dates and prices, a dedicated FAQ page, named credentialed coaches, and a claimed five-star review record. This is the largest single category gap (18/100) and the layer both rich results and AI extraction depend on.
How to fix (Business Info today; full rollout over a week)
Fix the Squarespace Business Information first (repairs defaults sitewide). Then add via per-page Code Injection: Organization sitewide, Event/Course + Offer on camp pages, Product/Offer on the membership, Person on coaches, FAQPage on /faq, and AggregateRating once reviews are embedded.
The five revenue pages have no H1 Critical
Verified: austria-performance-elite-camp, austria-technical-progression-camp, canada-performance-elite-camp, canada-technical-progression-camps and private-coaching all render 0 H1 — the visible headline is marked up as an H2. These are the exact pages holding the dates and prices, so Google and AI engines have no primary topic signal where it matters most. Elsewhere the opposite problem appears: ski-news has 13 H1s and ski-iq has 3, flattening the document outline.
How to fix (an hour)
Promote each camp page's headline to a single, keyword-rich, geo-qualified H1 (e.g. "Performance Ski Camp — Stubai Glacier, Austria"). Demote the extra H1s on ski-news and ski-iq to H2. One H1 per page.
Duplicate / templated titles and 11 missing meta descriptions High
"Performance Ski Camps | Jack's Ski Club" is used by both the Austria performance camp and the FAQ page (which wears a camp title); "Technical Progression Ski Camps  | Jack's Ski Club" (with a double space) is shared by the Austria and Canada technical pages; and "Jack's Ski Club | Jack's Ski Club" is the uncustomised template on both the-camps and coaches. Separately, 11 pages have no meta description (incl. memberships, pricing, private-coaching, ski-fitness, ski-technique, reviews), and 4 camp pages plus the FAQ share one duplicated description that says "coached by ex World Cup" — conflicting with the about page's "ex-British Team" claim.
How to fix (half a day)
Give every page a unique, intent-matched, geo-qualified title under ~60 characters, and write unique meta descriptions for the money/intent pages first. Fix the FAQ title and resolve the "ex World Cup" vs "ex-British Team" contradiction to one true claim.
Page cannibalisation across the camp pages High
Four pages compete for the same "ski camps Austria" intent: the thin europe-camp-type (H1 "Austrian Ski Camps", 361 words), the-camps, and the two deep Austria pages (1,300–1,550 words). A parallel set (canada-camp-type-1, 388 words) competes with the deep Canada pages. The thin hubs dilute the authority of the deep pages that should rank, and split internal-link equity.
How to fix (a day)
Promote one deep Austria page and one deep Canada page as the country landing pages; 301 the thin europe-camp-type and canada-camp-type-1 into them. Keep /the-camps as a genuine hub targeting "adult ski camps" that links down, not across.
The sitemap is ~64% junk and broadcasts dead pages High
The sitemap lists 191 URLs but only ~25 are real marketing pages. The rest is ~123 thin /ski-fitness/v/* and /ski-technique/v/* video URLs with malformed/duplicate slugs (15-minj, 20-mi, day-7-off, random hashes), plus index bloat: four live Squarespace demo posts (blog-post-title-onefour), an indexed URL with a Facebook tracking string baked into the slug (/thecampsfbclid...), an empty /location page, duplicate pairs (/memberships + /membership-sales-page-2; /newsletter + /newsletter-1), three near-identical t-shirt product URLs, and a stale 2025 pricing page still live while the camps now run in 2026.
How to fix (half a day)
Unpublish the demo posts and the empty/duplicate pages, delete or 301 the fbclid URL and the stale pricing page, and consolidate the membership and newsletter duplicates to one canonical each. Treat the gated video-library URLs as members-only (noindex) so they stop diluting crawl budget.
Star coaching authority is invisible to machines High
The coaches page describes a "two-time Olympian & World Cup medalist", a former Japanese World Cup / Olympic SL team coach, and multiple BASI Level 4 (highest-level) instructors — genuinely rare authority. But five of the six coach cards are headed only "COACH" with no name, there is no Person schema, and no sameAs linking to Olympic.org / FIS / Wikipedia profiles. The founder's headline credential is also told four inconsistent ways across pages (ex-British Team vs ex-World Cup vs ex-professional racer; BASI Level 4 vs ISTD Level 4; 15+ years vs decades). Authority that isn't attributed to a named person can't be credited by Google or cited by AI.
How to fix (a day)
Name every coach, settle the founder's bio to one true version, and add Person schema with sameAs to each coach's Olympic/FIS/Wikipedia profile. This converts a wasted asset into a strong, machine-readable E-E-A-T signal.
Empty Reviews & Location pages; unused 5-star reputation High
The about page claims "All 5 star reviews on Google", but the /reviews page renders only a heading with no embedded reviews and no Review/AggregateRating schema, and the /location page is an empty placeholder (just "Canada Camps" + a newsletter signup). For a camp business, social proof and destination detail are exactly what converts and what AI engines look for — both are being left blank. A real Google Business Profile appears to exist but is mis-branded and never surfaced on the site.
How to fix (a day, mostly content)
Embed real reviews on /reviews and back them with AggregateRating schema. Rebuild /location as proper destination pages (see the architecture below) with maps, getting-there and accommodation detail. Re-brand and link the GBP as a single service-area business.
Heavy hero image dragging mobile LCP High
Hosting fundamentals are good (HTTP/2, gzip, ~270ms TTFB, WebP auto-conversion, image dimensions set so layout shift is controlled). But the home hero is a 2886×1770 PNG screenshot that Squarespace re-encodes to a ~1MB WebP and loads via JavaScript rather than an eager srcset, and lazy-loading is barely applied (camp pages lazy-load only 4 of 38 images). Estimated mobile CWV (lab): LCP ~3.8–4.6s, INP ~200–350ms, CLS ~0.05–0.12. The og:image is also served over insecure http://.
How to fix (a few hours, owner-controllable parts)
Replace the PNG screenshot hero with a right-sized real photo (<200KB), enable lazy-loading on below-fold images, re-upload oversized source images at sane dimensions, and serve og:image over https. The Squarespace core bundle itself is platform-owned and out of scope.
Recommended Destination-Page Architecture
Replace the empty /location page with real geo-landing pages that capture destination search

As a destination/multi-location coaching business, Jack's Ski Club should run a single service-area Google Business Profile (not one GBP per venue) and build dedicated destination spokes rather than one empty /location page:

• /ski-camps-austria-stubai — Stubai Glacier detail, resort facts, Innsbruck travel/transfers, accommodation, the 2026 dates, embedded map, links to the two Austria camp pages.

• /ski-camps-canada-silverstar — the same depth for the Canadian resort: terrain, getting there, lodging, dates, map.

• /the-camps — kept as the hub targeting "adult ski camps", linking down to both destination pages and the individual camps.

Each destination page carries consistent NAP, LocalBusiness/Place schema, and the camp Event schema — turning geographic intent ("Stubai ski camp", "ski camp near Innsbruck") into bookings instead of bouncing visitors off a blank page.

Action Plan
Three sprints, ordered by impact-per-effort. Tap a checkbox to mark progress.
1
Sprint 1 — Week one. Fix the foundations
Highest impact-per-effort. No new content — these are settings, find-and-replace and template fixes that stop the biggest signal leaks at once.
Pick ONE brand name and unify it everywhere
Set "Jack's Ski Club" in Squarespace Business Info (fixes schema + og sitewide), find-and-replace the copy, retire the second email domain, remove the user@domain.com placeholder.
Half a dayCritical impact
Add an H1 to the five revenue pages; fix titles & meta
One keyword-rich, geo-qualified H1 per camp/coaching page; de-duplicate the templated titles; write the 11 missing meta descriptions, money pages first.
Half a dayHigh impact
Publish /llms.txt and fix the LocalBusiness defaults
Ship the curated llms.txt (HTTP 200, text/plain); correct the opening hours, add address/geo/priceRange so the LocalBusiness block stops reading as closed.
2 hrsHigh impact
Clean the sitemap: kill demo, junk and stale pages
Unpublish the four demo blog posts, the empty /location, the fbclid URL and the stale 2025 pricing page; noindex the gated video-library URLs; consolidate the duplicate membership/newsletter pages.
Half a dayMedium impact
2
Sprint 2 — Weeks two–three. The structured-data & trust layer
The machine-readable layer that drives rich results, AI citation and the largest visibility gains for a camp business.
Add Event/Course + Offer schema to every camp page
Real dates and prices already exist as text — mark them up. The single largest schema win, and what makes the camps citable by AI.
1–2 daysHigh impact
Name the coaches; add Person + FAQPage + Product schema
Name all coaches with sameAs to Olympic/FIS profiles; FAQPage on /faq; Product/Offer on the $20 membership. Settle the founder bio to one true version.
1 dayHigh impact
Fill the Reviews page + add AggregateRating
Embed real Google reviews and back them with schema; re-brand and surface the Google Business Profile. Turns a claimed reputation into a visible, machine-readable one.
Half a dayMedium impact
Resolve camp-page cannibalisation
301 the thin europe-camp-type and canada-camp-type-1 hubs into the deep country pages; keep /the-camps as a true hub that links down.
Half a dayMedium impact
3
Sprint 3 — Month one. Architecture, depth & speed
Turns a strong but unwired site into a ranking system, and tidies the remaining hygiene.
Build the destination pages + internal-link the libraries
Ship /ski-camps-austria-stubai and /ski-camps-canada-silverstar; add contextual in-body links from the technique/fitness/blog content down to the camps and membership.
1–2 wksHigh impact
Build out the online-coaching page
Expand private-coaching from 275 words into a real landing page for "online ski coaching / video analysis" — an under-served, growing, winnable demand.
2–3 daysMedium impact
Performance + image hygiene
Right-size the hero, lazy-load below-fold images, re-upload oversized sources, serve og:image over https. Lifts mobile LCP toward target.
2–3 daysMedium impact
Add HowTo/VideoObject schema to the free libraries
Mark up Ski IQ drills and the technique videos so they can surface in Google AI Overviews and video-rich answers; add transcripts where feasible.
OngoingCompounding
Today
53
Grade C
After Sprint 1
66
+13
After Sprint 2
79
+26
After Sprint 3
88
+35

Bottom line

Jack's Ski Club has already done the genuinely hard part: real first-hand camp content, a $20 membership library, and a coaching roster that includes a two-time Olympian and World Cup-level coaches. The fundamentals of the site — hosting, redirects, mobile rendering, the depth of the camp pages — are intact. What is missing is the machine-readable layer that Google and AI engines now use to identify, trust and rank a business: a single brand name, structured data for the camps, named experts, proper headings, and a clean index.

Because the substance already exists, this is a packaging problem, not a writing one — which makes the 53 unusually recoverable. One focused week of configuration and template work (Sprint 1) lifts it by roughly thirteen points and resolves the entity confusion that caps everything. Sprint 2 adds the schema and trust layer that turns the camps into rich results and AI citations. By the end of Sprint 3 the site is genuinely positioned to win the high-intent Austria, Canada and Stubai ski-camp searches — in both traditional Google results and AI answers — that it currently cedes.