161 lines
10 KiB
Markdown
161 lines
10 KiB
Markdown
# GEO Analysis — Goodwalk (goodwalk.co.nz)
|
||||
|
|
|
|||
|
|
_Generative Engine Optimization audit · February 2026 criteria · analyzed 2026-06-23_
|
|||
|
|
|
|||
|
|
Scope: SvelteKit codebase at `C:\Users\mattc\gw-svelte\gw-svelte` (SSR via `@sveltejs/adapter-node`). This is a single-location Auckland dog-walking service — a local SAB (service-area business), so GEO leverage skews toward local AI answers ("dog walker in Mt Eden", "Auckland pack walks", "puppy visit cost Auckland").
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. GEO Readiness Score: 73 / 100
|
|||
|
|
|
|||
|
|
A strong technical foundation already in place. The on-site work is close to best-practice; the gap is **off-site brand presence** and **passage-level citability** of the marketing copy.
|
|||
|
|
|
|||
|
|
| Criterion | Weight | Score | Notes |
|
|||
|
|
|-----------|--------|-------|-------|
|
|||
|
|
| Citability | 25% | 16/25 | Excellent `llms.txt` facts; on-page copy is punchy brand fragments, not extractable answer blocks |
|
|||
|
|
| Structural Readability | 20% | 15/20 | Clean H1→H2, FAQ `<details>`; few tables/comparison blocks |
|
|||
|
|
| Multi-Modal | 15% | 9/15 | Rich images + alt text everywhere; no video, infographics, or tools |
|
|||
|
|
| Authority & Brand | 20% | 14/20 | Strong on-site E-E-A-T (Person/founder schema, reviews); thin off-site (no Wikipedia/Reddit/YouTube) |
|
|||
|
|
| Technical Accessibility | 20% | 19/20 | SSR, AI crawlers explicitly allowed, `llms.txt` present — near perfect |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Platform Breakdown
|
|||
|
|
|
|||
|
|
| Platform | Est. Score | Why |
|
|||
|
|
|----------|-----------|-----|
|
|||
|
|
| **Google AI Overviews** | 80 | Best-aligned — SSR + rich LocalBusiness/Person/FAQ schema + local entity signals. Citations come from top-ranking pages, so this rides your existing SEO. |
|
|||
|
|
| **Bing Copilot** | 68 | Schema and SSR help; needs Bing index coverage + IndexNow. |
|
|||
|
|
| **ChatGPT (web search)** | 61 | Leans on Wikipedia (47.9%) and Reddit (11.3%). No entity presence on either → low. |
|
|||
|
|
| **Perplexity** | 57 | Reddit-driven (46.7%). No community validation present → weakest channel. |
|
|||
|
|
|
|||
|
|
**Implication:** you are well-positioned for Google AIO and should focus net-new effort on the off-site signals that feed ChatGPT/Perplexity.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. AI Crawler Access Status ✅
|
|||
|
|
|
|||
|
|
`src/routes/robots.txt/+server.ts` explicitly allows the key search crawlers — this is correctly done:
|
|||
|
|
|
|||
|
|
| Crawler | Status |
|
|||
|
|
|---------|--------|
|
|||
|
|
| GPTBot (OpenAI) | ✅ Allowed |
|
|||
|
|
| OAI-SearchBot (OpenAI) | ✅ Allowed |
|
|||
|
|
| ClaudeBot (Anthropic) | ✅ Allowed |
|
|||
|
|
| PerplexityBot | ✅ Allowed |
|
|||
|
|
| Bingbot / others (`*`) | ✅ Allowed (with sensible `/api/`, `/variants/`, `/contract` disallows) |
|
|||
|
|
|
|||
|
|
No action required. One optional addition: `ChatGPT-User` (live browsing fetches) is not named but is covered by `User-agent: *`.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. llms.txt Status ✅
|
|||
|
|
|
|||
|
|
Present at `static/llms.txt` and well-structured — better than most sites. It already includes founder, contact, hours, pricing summary, service URLs, suburb list, and location-page index.
|
|||
|
|
|
|||
|
|
Minor improvements:
|
|||
|
|
- **Update `Last updated`** (currently `2026-05-18`) on each meaningful content change.
|
|||
|
|
- Consider adding a one-line **"What is Goodwalk"** definitional sentence at the very top under `> ` (the quotable blockquote) — AI models lift this verbatim.
|
|||
|
|
- Add the **Meet & Greet is free** fact and **free pickup/drop-off** as explicit bullet facts (they're a differentiator AI answers love to surface).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Brand Mention Analysis — biggest opportunity
|
|||
|
|
|
|||
|
|
Per Ahrefs (Dec 2025), **brand mentions correlate ~3× more strongly with AI visibility than backlinks**. This is your largest lever and it is entirely off-site.
|
|||
|
|
|
|||
|
|
| Platform | Presence | Priority |
|
|||
|
|
|----------|----------|----------|
|
|||
|
|
| Instagram | ✅ `@goodwalk.nz` (linked, in `sameAs`) | Maintained |
|
|||
|
|
| Facebook | ✅ Linked in footer | Maintained |
|
|||
|
|
| Google Business Profile | ✅ `g.page` link + 30× 5-star reviews in schema | Strong |
|
|||
|
|
| **Reddit** | ❌ None | **High** — drives Perplexity (46.7%) + ChatGPT (11.3%) |
|
|||
|
|
| **YouTube** | ❌ None | **High** — strongest single citation correlation (~0.737) |
|
|||
|
|
| **Wikipedia/Wikidata** | ❌ None | Medium (hard for a small local business; skip unless notable) |
|
|||
|
|
| LinkedIn (Alessandra) | ❌ Not in Person `sameAs` | Medium — easy entity win |
|
|||
|
|
|
|||
|
|
**Realistic actions for a local business:**
|
|||
|
|
1. Get genuine mentions in Auckland subreddits (r/auckland, r/newzealand) — answer dog-care questions helpfully; don't spam.
|
|||
|
|
2. Post a few short YouTube clips (pack walk footage, "what is a Meet & Greet") — even low view counts create the entity association.
|
|||
|
|
3. List on NZ pet directories and local-business aggregators (consistent NAP).
|
|||
|
|
4. Add Alessandra's LinkedIn (if any) to the `Person` schema `sameAs`.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Passage-Level Citability
|
|||
|
|
|
|||
|
|
Optimal AI-citation block length is **134–167 words, self-contained**. Your on-page copy is deliberately fragmented brand voice — great for humans, weak for extraction:
|
|||
|
|
|
|||
|
|
> "Built for dogs who do better one-on-one. Their pace. Their walk. Same walker every time." _(dog-walking.ts)_
|
|||
|
|
|
|||
|
|
These single-line fragments rarely get quoted because they don't answer a question standalone. **Recommendation: keep the brand hero copy, but add one extractable answer block per service page**, e.g.:
|
|||
|
|
|
|||
|
|
> **What is a solo dog walk?** A solo dog walk is a one-on-one outing where a single dog is walked by the same walker every time, at the dog's own pace. Goodwalk offers solo walks across Auckland Central for dogs who do better without a group — reactive dogs, seniors, post-surgery recovery, and anxious rescues. Walks run 30 minutes (seniors/lower energy), 45 minutes (most dogs), or 60 minutes (longer outings), with free door-to-door pickup and drop-off and a photo update after every walk. Solo walks start from $45 per walk. _(≈70 words — expand toward ~140 with a sentence on when to choose solo vs pack.)_
|
|||
|
|
|
|||
|
|
Your **`llms.txt` already does this well** — the "Key facts" and "Pricing summary" blocks are exactly the quotable format. Mirror that density into visible page HTML.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. Server-Side Rendering Check ✅
|
|||
|
|
|
|||
|
|
- SSR is **on** (adapter-node, no `export const ssr = false` anywhere). AI crawlers, which do not execute JS, will see full content.
|
|||
|
|
- All structured data is emitted server-side in `<svelte:head>` (SeoHead.svelte, FaqSection.svelte) — good.
|
|||
|
|
- ⚠️ One caveat: the `<noscript>` overlay says "Please enable JavaScript to use this site." The rendered HTML is fine for crawlers, but make sure the **primary content is in the SSR payload and not gated behind hydration** — the booking/contact form needing JS is fine; the service descriptions and FAQs must be in source HTML (they are, via the content modules — confirmed).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. Top 5 Highest-Impact Changes
|
|||
|
|
|
|||
|
|
1. **Build off-site brand mentions (Reddit + YouTube + NZ directories).** Highest correlation with AI citation; the single biggest unlock for ChatGPT/Perplexity. _(High effort, high impact)_
|
|||
|
|
2. **Add a 134–167 word "What is [service]?" answer block** to each service page (pack-walks, dog-walking, puppy-visits) and an "How much does dog walking cost in Auckland?" block to `/our-pricing`. _(Medium effort, high impact)_
|
|||
|
|
3. **Add price + priceCurrency to the `Offer` nodes** in the homepage `hasOfferCatalog` (currently name/url only). Lets AI quote exact prices with confidence. _(Low effort, medium impact)_
|
|||
|
|
4. **Create an Auckland dog-care FAQ / short guide page** to capture informational AI queries ("how often should I walk my dog", "pack walk vs solo walk"). You have zero informational content today — purely commercial. _(Medium effort, high impact)_
|
|||
|
|
5. **Add `sameAs` to the Person (Alessandra) schema** and a visible author/founder byline with credentials (pet first-aid cert, insured) near service content. Strengthens E-E-A-T entity. _(Low effort, medium impact)_
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. Schema Recommendations
|
|||
|
|
|
|||
|
|
Already excellent: `WebSite`, `LocalBusiness`+`PetCareService` (with `aggregateRating`, `review`, `openingHoursSpecification`, `areaServed`, `hasOfferCatalog`), `Person` (founder, `knowsAbout`), `FAQPage`, `BreadcrumbList`, `Service` (location pages). Gaps to close:
|
|||
|
|
|
|||
|
|
```jsonc
|
|||
|
|
// In hasOfferCatalog → each Offer, add price:
|
|||
|
|
{
|
|||
|
|
"@type": "Offer",
|
|||
|
|
"itemOffered": { "@type": "Service", "name": "Tiny Gang Pack Walks", "url": "https://www.goodwalk.co.nz/pack-walks" },
|
|||
|
|
"price": "49.50",
|
|||
|
|
"priceCurrency": "NZD"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```jsonc
|
|||
|
|
// Person (Alessandra) — add credentials + external entity links:
|
|||
|
|
"hasCredential": [
|
|||
|
|
{ "@type": "EducationalOccupationalCredential", "credentialCategory": "certificate", "name": "Pet First Aid Certificate" }
|
|||
|
|
],
|
|||
|
|
"sameAs": ["https://www.linkedin.com/in/..."] // if available
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- Add **`priceRange`** (e.g. `"$$"`) and a **`geo`** node (`latitude`/`longitude`) to the LocalBusiness — both are standard LocalBusiness AI signals currently absent.
|
|||
|
|
- Optionally model each service page as its own `Service` with an `OfferCatalog` so service pages stand alone as cited entities (location pages already do this well).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10. Content Reformatting Suggestions
|
|||
|
|
|
|||
|
|
| Page | Current | Suggested GEO addition |
|
|||
|
|
|------|---------|------------------------|
|
|||
|
|
| `/dog-walking` (solo) | Brand fragments, no definition | Add "What is a solo dog walk?" 140-word block (see §6) |
|
|||
|
|
| `/pack-walks` | — | Add "What is a Tiny Gang pack walk?" + a **pack vs solo comparison table** (dogs per group, best for, price) |
|
|||
|
|
| `/puppy-visits` | — | Add "What happens in a puppy visit?" + duration/price block |
|
|||
|
|
| `/our-pricing` | Pricing copy | Add "How much does a dog walker cost in Auckland?" answer block with a clean price table (service / duration / price NZD) |
|
|||
|
|
| New: `/guide` or FAQ hub | none | Informational content to win non-commercial AI queries and earn citations |
|
|||
|
|
|
|||
|
|
**Tables are under-used.** AI Overviews and Perplexity disproportionately cite comparative tables. A single "Pack vs Solo vs Puppy Visit" comparison table would be high-value and on-brand.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### Bottom line
|
|||
|
|
|
|||
|
|
Technically this is a **top-decile small-business GEO setup** — SSR, AI crawler allow-list, `llms.txt`, and comprehensive schema are already done and done well. The remaining wins are **content shape** (add extractable answer blocks + tables, prices in schema) and, most of all, **off-site brand presence** (Reddit, YouTube, directories), which the data says matters more than anything on the page itself.
|