 goodwalk.co.nz — Full SEO Audit Report

  Date: 12 May 2026 | Site: Auckland dog walking service (SvelteKit + NGINX) | Auditor: 9 specialist subagents run in parallel

  ---
  SEO Health Score: 60 / 100

  ┌──────────────────────────┬────────┬───────┬───────────┐
  │         Category         │ Weight │ Score │ Weighted  │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ Content Quality          │ 23%    │ 68    │ 15.6      │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ Technical SEO            │ 22%    │ 52    │ 11.4      │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ On-Page SEO              │ 20%    │ 62    │ 12.4      │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ Schema / Structured Data │ 10%    │ 58    │ 5.8       │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ Performance (CWV)        │ 10%    │ 62    │ 6.2       │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ AI Search Readiness      │ 10%    │ 51    │ 5.1       │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ Images                   │ 5%     │ 65    │ 3.3       │
  ├──────────────────────────┼────────┼───────┼───────────┤
  │ TOTAL                    │        │       │ 59.8 → 60 │
  └──────────────────────────┴────────┴───────┴───────────┘

  ▎ The score is dragged down by one dominant structural issue: all 17 location pages are noindex. Remove that single directive and the score jumps ~8 points immediately.

  ---
  CRITICAL Issues (Fix Immediately)

  C-1 — All 17 location pages are noindex

  File: src/routes/locations/[suburb]/+page.svelte line ~23

  Every suburb page (/locations/mt-eden, /locations/kingsland, etc.) has noindex set. These are Goodwalk's primary local SEO assets — suburb-specific content, Service schema, BreadcrumbList, targeted H1s — and none of
  it is visible to Google. This is the largest single SEO issue on the site.

  Fix: Remove noindex from the <SeoHead> call. One line change, high impact.

  C-2 — Location pages missing from sitemap

  File: src/routes/sitemap.xml/+server.ts

  The sitemap deliberately excludes /locations/*. After unblocking indexation (C-1), Google discovery will be slow without sitemap inclusion.

  Fix: Import locationPages from $lib/content/locations and generate dynamic sitemap entries for all 17 suburb URLs.

  C-3 — reviewCount in schema is 4 when business has 30+ Google reviews

  File: src/routes/+page.svelte ~line 101

  reviewCount is hardcoded to String(data.content.testimonials.length) which resolves to "4". The site claims "30+ five-star Google reviews" in visible copy. Emitting reviewCount: "4" suppresses rich result eligibility
  and creates a factual schema/content discrepancy.

  Fix: Change to a static "30" floor value or a content-managed field.

  ---
  HIGH Priority (Fix Within 1 Week)

  H-1 — Homepage suburb list not linked to location pages

  File: src/lib/content/homepage.ts, InfoSection component

  The info.suburbs string is plain text — not hyperlinks. Even after fixing C-1, Google won't easily discover or distribute PageRank to location pages without internal links from the homepage. This is the fastest way to
   give location pages authority.

  Fix: Render each suburb as <a href="/locations/{slug}"> in the InfoSection.

  H-2 — Font Awesome npm import is killing performance

  File: src/routes/+layout.svelte

  Three FontAwesome CSS files (fontawesome.min.css, solid.min.css, brands.min.css) are imported globally for ~8 icons. Combined with 9 @fontsource weight files (Readex Pro × 4, Unbounded × 4, Fredoka × 1), this is
  estimated at 600–900 KB uncompressed CSS + WOFF2 on every page. This is the single largest performance bottleneck and the highest-ROI fix.

  Fix: Replace Font Awesome with inline SVG components for the specific icons used. Drop unused font weights.

  H-3 — Hero image preload is broken

  File: src/lib/components/SeoHead.svelte

  <link rel="preload" as="image"> points to the raw .png file, but @sveltejs/enhanced-img generates AVIF/WebP variants that the browser actually uses. The preload wastes bandwidth fetching the PNG while the actual LCP
  element loads later. The fetchpriority="high" on the <enhanced:img> already handles this correctly.

  Fix: Remove the <link rel="preload"> from SeoHead when preloadImage=true — rely solely on fetchpriority="high" on the image element.

  H-4 — Schema missing @id node stitching

  File: src/routes/+page.svelte, src/routes/[slug]/+page.svelte, src/lib/seo.ts

  No schema block uses @id URIs, so Google cannot link the LocalBusiness entity to the Service blocks across pages — they're treated as unrelated graphs. This weakens Knowledge Graph entity consolidation significantly.

  Fix:
  - Add "@id": "https://www.goodwalk.co.nz/#business" to the LocalBusiness block
  - Reference it as "provider": {"@id": "https://www.goodwalk.co.nz/#business"} in every Service block

  H-5 — @type: LocalBusiness too generic — missing PetCareService

  File: src/routes/+page.svelte ~line 41

  Using ["LocalBusiness", "PetCareService"] as the @type improves entity disambiguation for pet-service queries. No breaking change.

  H-6 — No NZ directory citations

  No codebase evidence of listings on:
  - Yellow Pages NZ (yellow.co.nz) — highest DA, commonly cited by Google NZ
  - Finda NZ (finda.co.nz) — pet services category exists
  - NoCowboys (nocowboys.co.nz) — NZ-specific service directory
  - Localist (localist.co.nz) — Auckland local business focus
  - Neighbourly (neighbourly.co.nz) — suburb-level community platform

  Per Whitespark 2026, 3 of the top 5 AI visibility factors are citation signals. For a local NZ service business this gap is material.

  H-7 — Service pages missing from desktop navigation

  The desktop nav only has #services (anchor), /our-pricing, and /about. Direct /pack-walks, /dog-walking, /puppy-visits URLs are not in the desktop nav — only the mobile nav and footer.

  ---
  MEDIUM Priority (Fix Within 1 Month)

  M-1 — All three service pages below 800-word threshold

  Pack Walks (~580 words), 1:1 Walks (~530 words), Puppy Visits (~510 words) all fall below the service page minimum. Missing from each: FAQ section, process explanation unique to that service, breed/situation examples.

  M-2 — H1 lacks "dog walking Auckland" keyword

  The hero H1 is "Come home to a calm, happy dog" — emotionally led but not keyword-anchored. "Auckland Central" appears in the subtitle but the primary query phrase "dog walking Auckland" is absent from any rendered H1
   on the site. Google's local ranking algorithm still weights explicit keyword presence in H1.

  M-3 — FAQ answers not self-contained for AI citation

  All FAQ answers require context to make sense. For AI Overviews, each answer needs the entity name and full context embedded in the answer itself. Example: "All walks are paid for a week in advance, via invoice" →
  should read "Goodwalk charges for walks one week in advance via invoice."

  M-4 — www vs non-www in sitemap vs canonical domain

  The sitemap uses https://www.goodwalk.co.nz as the base. Confirm this is the canonical domain (it should be — NGINX enforces the www redirect). The audit was requested for https://goodwalk.co.nz (no www). If both are
  correct and consistent, no action needed.

  M-5 — lastmod always set to today's date

  File: src/routes/sitemap.xml/+server.ts line ~24

  new Date().toISOString() at request time means every URL always shows today as last-modified. Google treats this as an unreliable freshness signal (may look manipulative). Replace with static per-route dates
  reflecting actual content changes.

  M-6 — No Content Security Policy header

  File: nginx/goodwalk.co.nz.svelte.conf.example

  No Content-Security-Policy header is set. GA4 is loaded from www.googletagmanager.com without a CSP allowlist. Also missing Permissions-Policy. No immediate SEO impact but a security posture gap.

  M-7 — Phone format inconsistent across schema

  Homepage schema: +64-22-642-1011 (dashes). seo.ts provider: +64226421011 (no dashes). Standardise all schema telephone to E.164 without hyphens: +64226421011.

  M-8 — No CDN / Brotli compression

  All traffic routes to an Auckland VPS with no edge caching. PageSpeed mobile lab scores will be penalised by ~150–300ms TTFB from geography. NGINX has Gzip at level 6 but no Brotli (15–25% better compression).
  Short-term: enable Brotli or raise Gzip to level 9. Medium-term: add Cloudflare free tier.

  M-9 — Add AI crawler permissions to robots.txt

  File: src/routes/robots.txt/+server.ts

  The robots.txt exists but has no AI crawler-specific directives (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot). Explicitly allowing these signals GEO awareness and removes ambiguity.

  M-10 — No llms.txt

  A minimal static/llms.txt declaring key pages and a business summary would improve citability on Perplexity and emerging LLM crawlers. Low effort, growing importance.

  M-11 — No business summary in AI citation window (140–160 words)

  No single paragraph on the site answers who/what/where/when/how-much in one citable block. GEO agent provided a ready-to-use 148-word draft in its findings.

  M-12 — areaServed on homepage uses strings, not Place objects

  File: src/routes/+page.svelte lines 57–75

  Homepage hardcodes suburb strings directly. The buildAreaServed() utility in seo.ts already returns correctly typed Place objects — it just needs to be called on the homepage too.

  M-13 — FAQPage schema on commercial site (Google rich results — limited value)

  Files: src/routes/+page.svelte, src/routes/[slug]/+page.svelte

  Google restricted FAQPage rich results to government/healthcare sites (Aug 2023). The FAQPage blocks produce no Google rich results for Goodwalk. However, the schema does provide AI/LLM citation benefit — it's the
  structured content that Perplexity and Google AI Overviews prefer to extract. Recommendation: Keep FAQPage schema but note it won't produce visual rich results in standard SERPs.

  ---
  LOW Priority (Backlog)

  ┌────────────────────────────────────────────────┬───────────────────────┬──────────────────────────────────────────────────────────┐
  │                     Issue                      │         File          │                          Notes                           │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Add priceRange: "$$" to LocalBusiness schema   │ +page.svelte          │ Appears in knowledge panels                              │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Add Person schema for Alessandra (founder)     │ +page.svelte          │ E-E-A-T signal for founder-led business                  │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Add SearchAction to WebSite schema             │ +page.svelte          │ Sitelinks Searchbox potential                            │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Add ContactPage schema to /contact-us          │ [slug]/+page.svelte   │ Missing structured data on key conversion page           │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Add seller to AggregateOffer on service pages  │ [slug]/+page.svelte   │ Link back to LocalBusiness entity                        │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Remove @context from nested Review objects     │ +page.svelte          │ Redundant, technically incorrect placement               │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Mobile testimonial carousel CLS                │ responsive.css        │ Set min-height on mobile stage for longest quote         │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ disallow: /api/ in robots.txt                  │ robots.txt/+server.ts │ Keeps crawl budget on content pages                      │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ disallow: /contract in robots.txt              │ Same                  │ Zero indexing value, wastes crawl budget                 │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ HSTS preload directive                         │ NGINX config          │ Required for HSTS preload list submission                │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Move large images to src/lib/images/           │ /static/images/       │ Puppy visits image is 3,327×2,217px, served uncompressed │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ terms-and-conditions, privacy-policy → noindex │ static-pages.ts       │ Currently indexed; minor                                 │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ IndexNow protocol                              │ New route             │ Bing/Yandex faster indexation                            │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Founding year in content                       │ Content files         │ "Serving Auckland since [year]" adds trust signal        │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Second review platform (NoCowboys NZ)          │ GBP/footer            │ Review diversity reduces single-platform risk            │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ YouTube presence                               │ External              │ Highest-correlation AI citation signal — entirely absent │
  ├────────────────────────────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────────┤
  │ Question-format H2/H3 headings                 │ Content files         │ Current headings are descriptive, not interrogative      │
  └────────────────────────────────────────────────┴───────────────────────┴──────────────────────────────────────────────────────────┘

  ---
  Backlink Profile

  The backlinks agent was unable to run Python API scripts (Bash access not available in this session). However it identified the following key link building opportunities:

  Unconfirmed NZ directory gaps (verify manually):
  - Yellow Pages NZ, Finda NZ, NoCowboys, Localist, Neighbourly, Dogz Online NZ, PetPages NZ

  Known competitor backlink sources to audit:
  Search site:yellow.co.nz "dog walking auckland" and site:nocowboys.co.nz "dog walking" to find listings Goodwalk is missing.

  To get a full scored backlink report, run python scripts/commoncrawl_graph.py goodwalk.co.nz --json via the terminal.

  ---
  What's Working Well

  ┌───────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────┐
  │           Strength            │                                             Detail                                             │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Full SSR                      │ SvelteKit SSR with adapter-node — all content in initial HTML, crawlers receive complete pages │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Security headers              │ HTTPS, HSTS, X-Frame-Options, X-Content-Type-Options, HSTS all present                         │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Mobile implementation         │ overflow-x: clip, iOS zoom prevention, safe-area-inset-bottom, aria-expanded — thorough        │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ LocalBusiness schema          │ Comprehensive: opening hours, offer catalog, reviews, sameAs, area served — strong foundation  │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ max-snippet:-1                │ Correctly set — allows Google to use any text length for AI Overviews                          │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ LCP optimisation signals      │ fetchpriority="high", loading="eager", decoding="async" on hero image                          │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ SSR structured data           │ JSON-LD is server-rendered in initial HTML, not injected by JS                                 │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Legacy redirects              │ /about-us, /booking, /home-stays all 301 correctly via SvelteKit                               │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Canonical consistency         │ siteUrl and NGINX redirect align on https://www.goodwalk.co.nz                                 │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ geo.region / hreflang         │ NZ-AUK geo meta and en-NZ hreflang correctly implemented                                       │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Location page content quality │ 17 pages with genuinely unique suburb intros, named parks, leash notes — passes doorway test   │
  ├───────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ Brand differentiation         │ "Tiny Gang," small dog specialist, solo operator with named walker — strong and citable        │
  └───────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────┘

  ---
  Prioritised Action Plan

  WEEK 1 — Critical + quick wins
   [C-1]  Remove noindex from /locations/[suburb]/+page.svelte        → 5 min
   [C-2]  Add location pages to sitemap.xml/+server.ts                → 30 min
   [C-3]  Fix reviewCount: 4 → 30 in AggregateRating                  → 5 min
   [H-1]  Link suburb names on homepage InfoSection to location pages  → 1 hr
   [H-3]  Remove broken <link rel="preload"> from SeoHead              → 15 min
   [H-4]  Add @id anchors to LocalBusiness and Service schemas         → 30 min
   [H-5]  Change @type to ["LocalBusiness", "PetCareService"]          → 5 min
   [M-7]  Standardise telephone to +64226421011 in all schema          → 10 min

  WEEK 2 — Performance + citations
   [H-2]  Replace Font Awesome with inline SVG icons                   → 3 hrs
   [H-6]  Create NZ directory listings (Yellow Pages, Finda, NoCowboys, Localist, Neighbourly)
   [M-9]  Add AI crawler directives to robots.txt                      → 15 min
   [M-12] Fix areaServed → call buildAreaServed() on homepage          → 15 min
   [M-5]  Replace dynamic lastmod with static per-route dates          → 30 min

  MONTH 1 — Content + AI readiness
   [M-1]  Expand service pages to 800+ words each (add FAQ, process, examples)
   [M-2]  Update H1 or subtitle to include "dog walking Auckland"
   [M-3]  Rewrite FAQ answers to be self-contained, entity-named
   [M-10] Create static/llms.txt                                       → 30 min
   [M-11] Add 148-word business summary paragraph to About page
   [M-6]  Add Content-Security-Policy and Permissions-Policy headers

  BACKLOG — Nice to have
   Add Person schema for Alessandra
   Add priceRange, SearchAction, ContactPage schema
   Move large images to src/lib/images/ for AVIF/WebP pipeline
   Enable Brotli on NGINX
   Add Cloudflare CDN
   Build YouTube presence
   Second review platform (NoCowboys NZ)

  ---

  ▎ SXO agent is still running — I'll append its search experience / intent-match findings when it completes.

  ---
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Built by agricidaniel — Join the AI Marketing Hub community
  🆓 Free  → https://www.skool.com/ai-marketing-hub
  ⚡ Pro   → https://www.skool.com/ai-marketing-hub-pro
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✻ Cogitated for 4m 23s

● Agent "SXO search experience optimization for goodwalk.co.nz" completed

● The SXO agent is in — here are the additional findings it surfaced:

  ---
  SXO Findings — Search Experience Optimization

  SXO Gap Score: 68 / 100

  Page-Type Analysis

  The site's structure is largely correct — single-provider service pages are the right type for branded and long-tail queries. The dominant structural problem is the same one found in Technical SEO: the 17 location
  pages are noindexed, which means Goodwalk cannot compete for the high-value suburb-specific queries ("dog walker Mt Eden", "dog walking Ponsonby") where a dedicated location page would beat both a homepage and a
  directory listing.

  For the head terms "dog walker Auckland" / "dog walking Auckland", the SERP is dominated by Local Pack results (~40–55% of clicks) and aggregator directories (Bark.com, NoCowboys). A single-provider homepage cannot
  displace aggregators on these terms — the real wins are in the Local Pack (GBP) and in long-tail suburb + service queries where location pages and specific service pages can rank.

  Additional Issues Surfaced by SXO

  HIGH — Homepage <title> wastes 7 characters with "Home |"
  Current: "Home | Auckland Dog Walking | Goodwalk"
  The "Home |" prefix is dead space and signals a generic page in the SERP snippet. Replace with:
  "Auckland Dog Walker | Pack Walks & 1:1 Walks | Goodwalk"

  HIGH — Homepage meta description missing price anchor, suburbs, and trust signal
  Current: "At Goodwalk, we offer Tiny Gang pack walks and one on one dog walking services throughout Auckland..."
  A competitor writing "Trusted by 30+ Auckland families. Pack walks from $49.50. Free Meet & Greet. Covering Mt Eden, Ponsonby, Grey Lynn & more." will outperform on click-through rate.

  HIGH — "Always Alessandra" message is buried 2–3 scrolls deep
  The single-named-walker proposition is the strongest brand differentiator but appears in the Promise section, not above the fold. Moving it into or immediately below the hero would improve conversion for all personas.

  MEDIUM — "Reactive/anxious dog" use case not addressed
  Kate's testimonial mentions "slightly hyper and anxious dog" but nowhere on the site do the words "reactive", "anxious", or "nervous dog" appear as a heading or FAQ answer. This is a high-intent search pattern ("dog
  walker for anxious dog Auckland") that the site could own with a single FAQ item on the 1:1 Walks page.

  MEDIUM — Price anchor missing from homepage above-the-fold
  Price-sensitive users won't scroll to pricing. Add "Pack walks from $49.50" to the homepage hero or intro strip.

  MEDIUM — Phone number not in hero or header
  (022) 642 1011 only appears in footer and About page. For a mobile service business, a visible tel: link in the header reduces friction for users who want to call before committing to a form.

  MEDIUM — /our-pricing missing question-format H2
  Adding <h2>How much does dog walking cost in Auckland?</h2> to the pricing page directly targets a PAA (People Also Ask) box question and could earn a Featured Snippet position.

  LOW — /dog-walking page targets "1:1 walks" but users search "private dog walker"
  The slug (/dog-walking) is excellent, but the H1 and title target "1:1 Dog Walks" — a low-volume phrase. "Private dog walker Auckland" has meaningfully higher search volume and would be a stronger secondary keyword
  target for this page.

  CONFIRM — MobileBookBar feature flag
  The sticky mobile CTA uses isMobileCtaButtonEnabled() feature flag. Confirm this is active in production — if disabled, the site is missing a high-conversion mobile element.

  ---
  Updated Priority Action Plan (with SXO additions)

  WEEK 1 — Critical fixes + zero-effort wins
   [C-1]  Remove noindex from location pages                           → 5 min
   [C-2]  Add location pages to sitemap                                → 30 min
   [C-3]  Fix reviewCount: 4 → 30 in AggregateRating schema           → 5 min
   [SXO]  Rewrite homepage <title> (remove "Home |")                   → 5 min
   [SXO]  Rewrite homepage meta description (add suburbs, price, reviews) → 15 min
   [H-1]  Link suburb names on homepage to location pages              → 1 hr
   [H-3]  Remove broken hero image <link rel="preload">                → 15 min
   [H-4]  Add @id anchors to LocalBusiness + Service schema            → 30 min
   [H-5]  Change @type to ["LocalBusiness", "PetCareService"]          → 5 min
   [M-7]  Standardise telephone to +64226421011 in all schema          → 10 min

  WEEK 2 — Performance + conversion + citations
   [H-2]  Replace Font Awesome with inline SVG icons                   → 3 hrs
   [SXO]  Move "always Alessandra" message above the fold              → 30 min
   [SXO]  Add price anchor ("Pack walks from $49.50") to homepage hero → 15 min
   [SXO]  Add phone number to header with tel: link                    → 15 min
   [SXO]  Add reactive/anxious dog FAQ to homepage + 1:1 Walks page    → 30 min
   [H-6]  Build NZ directory listings (Yellow Pages, Finda, NoCowboys, Localist)
   [M-9]  Add AI crawler directives to robots.txt                      → 15 min
   [M-5]  Replace dynamic lastmod with static per-route dates          → 30 min

  MONTH 1 — Content depth + AI readiness
   [M-1]  Expand service pages to 800+ words (FAQ, process, examples)
   [SXO]  Add question-format H2 to /our-pricing page                  → 10 min
   [SXO]  Add "private dog walker Auckland" keyword to /dog-walking     → 30 min
   [M-3]  Rewrite FAQ answers to be self-contained + entity-named
   [M-10] Create static/llms.txt                                       → 30 min
   [M-11] Add 148-word business summary paragraph to About page
   [M-6]  Add CSP and Permissions-Policy headers

  BACKLOG
   Add Person schema for Alessandra + priceRange + SearchAction
   Move large images to src/lib/images/ for AVIF/WebP pipeline
   Enable Brotli on NGINX / add Cloudflare CDN
   Build NoCowboys review profile
   Build YouTube presence
   Blog / educational content for informational queries

  ---
  The complete audit is now in. All 10 specialist agents have reported. The dominant theme across every analysis: remove noindex from the location pages — it's a one-line change that unlocks the site's entire local SEO
  strategy.

  ---