Safari SEO Skill (Agentic / Tanzania Tourism)
LLM-first SEO analysis skill purpose-built for Tanzania safari and tour-operator websites. Includes 15 specialized sub-skills, 7 specialist agents, and script-backed evidence collection for Kilimanjaro treks, Serengeti safaris, Ngorongoro crater trips, Northern Circuit packages, and Zanzibar add-ons.
<SKILL_DIR> = absolute path to this skill directory (the folder containing this SKILL.md).
Deterministic Trigger Mapping
Map common user wording to a fixed workflow:
| User says |
Route to |
perform seo analysis on <url> |
Single-URL full audit → resources/skills/safari-page.md |
audit my safari site / full SEO check |
Full site audit → resources/skills/safari-audit.md |
optimize tour page / new safari package |
resources/skills/safari-tour-page.md |
serengeti page / kilimanjaro landing page |
resources/skills/safari-destination.md |
keyword research tanzania |
resources/skills/safari-keywords.md |
google business profile arusha |
resources/skills/safari-local.md |
schema for safari package |
resources/skills/safari-schema.md |
hreflang swahili english |
resources/skills/safari-hreflang.md |
competitor analysis safari |
resources/skills/safari-competitors.md |
AI search / ChatGPT citations |
resources/skills/safari-geo.md |
| No explicit sub-skill + URL provided |
Single-URL full audit with mandatory deliverables |
For full/page audits, always produce:
FULL-AUDIT-REPORT.md (detailed findings with evidence)
ACTION-PLAN.md (prioritized fixes)
Available Commands
| Command |
Sub-Skill |
Description |
safari audit <url> |
safari-audit |
Full site audit with Tanzania scoring |
safari page <url> |
safari-page |
Deep single-page analysis |
safari content <url> |
safari-content |
E-E-A-T, depth, safari trust signals |
safari technical <url> |
safari-technical |
Crawlability, CWV, indexing, security |
safari schema <url> |
safari-schema |
TouristTrip, Product, TouristAttraction JSON-LD |
safari local <url> |
safari-local |
GBP, citations, Arusha/Moshi local SEO |
safari keywords <topic> |
safari-keywords |
Park-level keyword & seasonality research |
safari plan <url> |
safari-plan |
Strategic content calendar & hub architecture |
safari competitors <query> |
safari-competitors |
SERP gap analysis vs ranking operators |
safari hreflang <url> |
safari-hreflang |
EN/DE/FR/SW international validation |
safari images <url> |
safari-images |
Safari photo alt text, WebP, LCP heroes |
safari sitemap <url> |
safari-sitemap |
Tour/destination sitemap quality gates |
safari tour-page <url> |
safari-tour-page |
Commercial package page launch checklist |
safari destination <url> |
safari-destination |
Park hub page optimization |
safari geo <url> |
safari-geo |
AI search citation readiness |
Orchestration Logic
Step 1 — Identify the Task
Parse the user's request and read the matching resources/skills/safari-*.md file before executing.
- Full audit:
safari-audit.md — crawl key pages (homepage, top tours, destination hubs, blog), delegate to agents
- Single page:
safari-page.md — deep dive on one URL
- Tour launch:
safari-tour-page.md + checklists/new-tour-page.md
- Destination hub:
safari-destination.md + checklists/new-destination-page.md
- Strategic plan:
safari-plan.md + seasonality from 04-tanzania-niche/seasonality.md
Step 2 — Load Tanzania Ground Truth
Always load references.md when citing fees, visas, park rules, or authority facts.
| Fact type |
Authoritative source |
Never |
| National park fees |
tanzaniaparks.go.tz (TANAPA) |
Guess USD amounts |
| Ngorongoro fees |
ncaa.go.tz |
Conflate with TANAPA |
| Visa rules |
immigration.go.tz |
Outdated blog posts |
| Industry standards |
tatotz.org (TATO) |
Invent certifications |
| Porter ethics |
kpap.org |
Generic "responsible tourism" |
| Keyword volumes |
04-tanzania-niche/keywords/*.csv bands |
Fabricate exact MSV |
Step 3 — Collect Evidence
Primary (LLM-first): Use read_url_content or direct page fetch for baseline reasoning.
Deterministic verification (when script execution is available):
# Fetch and parse page HTML
python3 <SKILL_DIR>/scripts/fetch_page.py <url> --output /tmp/safari-page.html
python3 <SKILL_DIR>/scripts/parse_html.py /tmp/safari-page.html --url <url> --json
# Tanzania-specific audit runner
python3 <SKILL_DIR>/scripts/seo-audit.py <url> --json
# Core Web Vitals (mobile-first — safari travelers book on phones)
python3 <SKILL_DIR>/scripts/pagespeed.py <url> --strategy mobile --json
# Robots, security, redirects
python3 <SKILL_DIR>/scripts/robots_checker.py <url>
python3 <SKILL_DIR>/scripts/security_headers.py <url>
python3 <SKILL_DIR>/scripts/redirect_checker.py <url>
# Schema validation against repo templates
python3 <SKILL_DIR>/scripts/validate_schema.py <file_or_url>
python3 <SKILL_DIR>/scripts/generate-schema.py --template touristtrip --input tour.yaml --json
# Sitemap analysis
python3 <SKILL_DIR>/scripts/sitemap_checker.py <url>
python3 <SKILL_DIR>/scripts/sitemap-gen.py --urls urls.txt --output sitemap.xml
# Images (hero photos dominate LCP on safari sites)
python3 <SKILL_DIR>/scripts/image_inventory.py <url> --json
python3 <SKILL_DIR>/scripts/image_weight_audit.py <url> --json
# Local SEO signals
python3 <SKILL_DIR>/scripts/local_seo_checker.py <url> --json
# Hreflang for multilingual operator sites
python3 <SKILL_DIR>/scripts/hreflang_checker.py <url> --json
# Readability and content depth
python3 <SKILL_DIR>/scripts/readability.py /tmp/safari-page.html --json
python3 <SKILL_DIR>/scripts/article_seo.py <url> --keyword "<target_keyword>" --json
# Broken links (critical on itinerary pages with many internal links)
python3 <SKILL_DIR>/scripts/broken_links.py <url> --workers 5
# AI search readiness
python3 <SKILL_DIR>/scripts/llms_txt_checker.py <url>
python3 <SKILL_DIR>/scripts/citation_readiness.py <url> --json
Do not use third-party mirrors (e.g., r.jina.ai) as primary evidence when direct fetch or bundled scripts are available.
If a script fails (network, timeout, missing dependency), report as environment limitation — not a confirmed site issue. Continue with LLM analysis at Likely confidence.
Step 4 — Delegate to Specialist Agents
For comprehensive audits, adopt the relevant agent role from resources/agents/:
| Agent |
File |
Focus |
| Technical SEO |
safari-technical.md |
Crawlability, CWV, mobile, JS rendering |
| Content Quality |
safari-content.md |
E-E-A-T, experience signals, thin content |
| Schema Markup |
safari-schema.md |
TouristTrip, Product, TouristAttraction |
| Local SEO |
safari-local.md |
GBP, NAP, Arusha/Moshi citations |
| Performance |
safari-performance.md |
LCP heroes, INP on booking widgets |
| Verifier |
safari-verifier.md |
Deduplicate, validate evidence, suppress contradictions |
| Tanzania Niche |
tanzania-niche.md |
Migration timing, routes, fees, seasonality |
Step 5 — Apply Repo Quality Gates
| Resource |
Path |
Use for |
| Meta tag formulas |
01-onpage-content/meta-tags-guide.md |
Title/description patterns |
| Page architecture |
01-onpage-content/page-architecture.md |
Hub-and-spoke tour/destination structure |
| Internal linking |
01-onpage-content/internal-linking.md |
Blog → tour → destination flows |
| Content briefs |
01-onpage-content/content-briefs/ |
Kilimanjaro, Serengeti, Ngorongoro templates |
| Schema templates |
02-technical/schema/ |
JSON-LD with {{PLACEHOLDER}} syntax |
| Crawl checklist |
02-technical/crawl-checklist.md |
Indexing gates |
| CWV thresholds |
02-technical/core-web-vitals.md |
LCP/INP/CLS targets |
| Hreflang guide |
02-technical/hreflang-i18n.md |
EN/DE/FR/SW patterns |
| GBP guide |
03-local/google-business-profile.md |
Operator categories, service areas |
| Seasonality |
04-tanzania-niche/seasonality.md |
Content calendar timing |
| Search intent |
04-tanzania-niche/search-intent-by-park.md |
Info vs commercial routing |
| Glossary |
04-tanzania-niche/glossary.md |
Swahili terms, TANAPA/TATO/KPAP |
| Competitor patterns |
04-tanzania-niche/competitor-patterns.md |
SERP observation framework |
| Launch checklists |
checklists/ |
Tour page, destination, monthly SEO |
Step 6 — Verify Findings
python3 <SKILL_DIR>/scripts/finding_verifier.py --findings-json <raw_findings.json> --json
Use verified output for final report tables. Cross-check Tanzania-specific claims against references.md authorities.
Step 7 — Score and Report
Tanzania Safari Scoring Weights (Full Audit)
Canonical source of truth — defined here and mirrored in resources/skills/safari-audit.md.
| Category |
Weight |
Rationale |
| Content Quality & E-E-A-T |
22% |
Trust-critical YMYL-adjacent travel queries |
| Technical SEO |
18% |
Mobile booking, crawlability, indexation |
| On-Page SEO |
15% |
Title/meta/H1 for competitive safari SERPs |
| Schema / Structured Data |
15% |
TouristTrip, Product, Offer rich results |
| Local SEO & Trust |
12% |
Arusha/Moshi operators depend on local + GBP |
| Performance (CWV) |
8% |
Hero images and booking widgets affect CWV |
| Image Optimization |
5% |
Wildlife photos are primary content |
| AI Search Readiness (GEO) |
5% |
Growing AI travel research channel |
Score Interpretation
| Score |
Rating |
| 90-100 |
Excellent |
| 70-89 |
Good |
| 50-69 |
Needs Improvement |
| 30-49 |
Poor |
| 0-29 |
Critical |
Step 8 — Mandatory Deliverables
For safari audit, safari page, and generic perform seo analysis on <url> flows:
- Create
FULL-AUDIT-REPORT.md at audit start; update as evidence arrives
- Create
ACTION-PLAN.md at audit start; prioritize Critical → High → Medium → Low
- List all generated artifact paths in the final response
- Include Environment Limitations section if scripts were blocked
- Flag any unverified fee/visa claims with
⚠️ VERIFY AT SOURCE
Report Severity Levels
- 🔴 Critical — Blocks indexing, violates structured data policy, or misstates fees/visas
- ⚠️ Warning — Optimization opportunity (fix within 1 month)
- ✅ Pass — Meets or exceeds standards
- ℹ️ Info — Not applicable or informational
Tanzania Page-Type Detection
Auto-detect page type to apply correct checks:
| Signals |
Page Type |
Sub-Skill |
Min Words |
| Price, duration, itinerary, "book now" |
Tour package |
safari-tour-page.md |
800+ |
| Park name, wildlife, best time, no price |
Destination hub |
safari-destination.md |
1,200+ |
| Route comparison, packing list, how-to |
Informational blog |
safari-content.md |
1,500+ |
| Company name, team, licenses, contact |
Operator brand |
safari-local.md |
500+ |
/de/, /fr/, hreflang |
International |
safari-hreflang.md |
— |
Schema Templates (Repo)
Pre-built JSON-LD in 02-technical/schema/:
| Template |
Page Type |
touristtrip.json + product-offer-tour.json |
Multi-day safari/trek packages |
touristattraction.json |
Park/destination hubs |
organization-travelagency.json |
Operator footer sitewide |
review-aggregaterating.json |
First-party reviews only |
breadcrumblist.json |
All pages with URL depth |
faqpage.json |
FAQ sections (note: rich results restricted for commercial FAQ schema — use for content structure, not rich result expectation) |
Generate programmatically:
python3 <SKILL_DIR>/scripts/generate-schema.py --template product-offer-tour --input tour.yaml
Validate before publish:
# Rich Results Test: https://search.google.com/test/rich-results
python3 <SKILL_DIR>/scripts/validate_schema.py templates/tour-page.html
Critical Rules (Tanzania Safari)
- INP not FID — INP is the sole interactivity metric (FID removed September 9, 2024). Never reference FID.
- Never fabricate fees — Cite
tanzaniaparks.go.tz or ncaa.go.tz with retrieval date; use ⚠️ VERIFY if live fetch failed.
- Never fabricate reviews in schema —
AggregateRating must reflect real first-party reviews only.
- FAQ schema is restricted — FAQPage rich results limited to government/health authority sites. Commercial safari sites may use FAQ content structure without expecting FAQ rich results.
- HowTo schema is deprecated — Never recommend for Kilimanjaro packing lists.
- JSON-LD only — Never recommend Microdata or RDFa.
- Migration claims need dates — Serengeti migration timing varies annually; cite general patterns from
04-tanzania-niche/seasonality.md, avoid false precision ("crossing on July 15").
- Kilimanjaro route facts — Seven official routes (Marangu, Machame, Lemosho, Shira, Rongai, Northern Circuit, Umbwe); success rates vary by operator — don't invent percentages without source.
- White-hat only — Refuse PBNs, fake reviews, scraped aggregator content, AI doorway pages per park.
- Location page limits — Warning at 30+ near-duplicate destination pages; hard stop at 50+.
- LLM-first, script-backed — Always attempt scripts; never block report on single script failure.
- Mandatory file artifacts —
FULL-AUDIT-REPORT.md + ACTION-PLAN.md for audit flows.
- Commercial vs informational routing — Route info queries to blogs (
safari-content); commercial queries to tour pages (safari-tour-page) per 04-tanzania-niche/search-intent-by-park.md.
Dependencies
pip install -r <SKILL_DIR>/scripts/requirements.txt
# Optional: Playwright for visual analysis
pip install playwright && playwright install chromium
Local repo scripts (M4+): seo-audit.py, sitemap-gen.py, generate-schema.py — see scripts/README.md.
1---2name: safari-seo3description: Open-source agentic SEO skill for Tanzania safari, tour-operator, and travel sites. Works in Grok, Cursor, Claude Code, Codex, Copilot. Triggers on: safari SEO, tour operator SEO, Kilimanjaro/Serengeti/Ngorongoro ranking, TouristTrip schema, migration content, Northern Circuit keywords, local SEO Arusha Moshi, safari audit, hreflang, Core Web Vitals wildlife photos, or "perform SEO analysis on <url>". Ships 363 keywords, 15 sub-skills, 14 scripts. Outputs FULL-AUDIT-REPORT.md + ACTION-PLAN.md. Repo: github.com/cleven12/tanzania-tourism-seo4---56# Safari SEO Skill (Agentic / Tanzania Tourism)78LLM-first SEO analysis skill purpose-built for Tanzania safari and tour-operator websites. Includes **15 specialized sub-skills**, **7 specialist agents**, and script-backed evidence collection for Kilimanjaro treks, Serengeti safaris, Ngorongoro crater trips, Northern Circuit packages, and Zanzibar add-ons.910`<SKILL_DIR>` = absolute path to this skill directory (the folder containing this `SKILL.md`).1112## Deterministic Trigger Mapping1314Map common user wording to a fixed workflow:1516| User says | Route to |17|-----------|----------|18| `perform seo analysis on <url>` | **Single-URL full audit** → `resources/skills/safari-page.md` |19| `audit my safari site` / `full SEO check` | **Full site audit** → `resources/skills/safari-audit.md` |20| `optimize tour page` / `new safari package` | `resources/skills/safari-tour-page.md` |21| `serengeti page` / `kilimanjaro landing page` | `resources/skills/safari-destination.md` |22| `keyword research tanzania` | `resources/skills/safari-keywords.md` |23| `google business profile arusha` | `resources/skills/safari-local.md` |24| `schema for safari package` | `resources/skills/safari-schema.md` |25| `hreflang swahili english` | `resources/skills/safari-hreflang.md` |26| `competitor analysis safari` | `resources/skills/safari-competitors.md` |27| `AI search / ChatGPT citations` | `resources/skills/safari-geo.md` |28| No explicit sub-skill + URL provided | **Single-URL full audit** with mandatory deliverables |2930For full/page audits, **always** produce:31- `FULL-AUDIT-REPORT.md` (detailed findings with evidence)32- `ACTION-PLAN.md` (prioritized fixes)3334## Available Commands3536| Command | Sub-Skill | Description |37|---------|-----------|-------------|38| `safari audit <url>` | [safari-audit](resources/skills/safari-audit.md) | Full site audit with Tanzania scoring |39| `safari page <url>` | [safari-page](resources/skills/safari-page.md) | Deep single-page analysis |40| `safari content <url>` | [safari-content](resources/skills/safari-content.md) | E-E-A-T, depth, safari trust signals |41| `safari technical <url>` | [safari-technical](resources/skills/safari-technical.md) | Crawlability, CWV, indexing, security |42| `safari schema <url>` | [safari-schema](resources/skills/safari-schema.md) | TouristTrip, Product, TouristAttraction JSON-LD |43| `safari local <url>` | [safari-local](resources/skills/safari-local.md) | GBP, citations, Arusha/Moshi local SEO |44| `safari keywords <topic>` | [safari-keywords](resources/skills/safari-keywords.md) | Park-level keyword & seasonality research |45| `safari plan <url>` | [safari-plan](resources/skills/safari-plan.md) | Strategic content calendar & hub architecture |46| `safari competitors <query>` | [safari-competitors](resources/skills/safari-competitors.md) | SERP gap analysis vs ranking operators |47| `safari hreflang <url>` | [safari-hreflang](resources/skills/safari-hreflang.md) | EN/DE/FR/SW international validation |48| `safari images <url>` | [safari-images](resources/skills/safari-images.md) | Safari photo alt text, WebP, LCP heroes |49| `safari sitemap <url>` | [safari-sitemap](resources/skills/safari-sitemap.md) | Tour/destination sitemap quality gates |50| `safari tour-page <url>` | [safari-tour-page](resources/skills/safari-tour-page.md) | Commercial package page launch checklist |51| `safari destination <url>` | [safari-destination](resources/skills/safari-destination.md) | Park hub page optimization |52| `safari geo <url>` | [safari-geo](resources/skills/safari-geo.md) | AI search citation readiness |5354---5556## Orchestration Logic5758### Step 1 — Identify the Task5960Parse the user's request and read the matching `resources/skills/safari-*.md` file **before** executing.6162- **Full audit**: `safari-audit.md` — crawl key pages (homepage, top tours, destination hubs, blog), delegate to agents63- **Single page**: `safari-page.md` — deep dive on one URL64- **Tour launch**: `safari-tour-page.md` + `checklists/new-tour-page.md`65- **Destination hub**: `safari-destination.md` + `checklists/new-destination-page.md`66- **Strategic plan**: `safari-plan.md` + seasonality from `04-tanzania-niche/seasonality.md`6768### Step 2 — Load Tanzania Ground Truth6970**Always** load `references.md` when citing fees, visas, park rules, or authority facts.7172| Fact type | Authoritative source | Never |73|-----------|---------------------|-------|74| National park fees | `tanzaniaparks.go.tz` (TANAPA) | Guess USD amounts |75| Ngorongoro fees | `ncaa.go.tz` | Conflate with TANAPA |76| Visa rules | `immigration.go.tz` | Outdated blog posts |77| Industry standards | `tatotz.org` (TATO) | Invent certifications |78| Porter ethics | `kpap.org` | Generic "responsible tourism" |79| Keyword volumes | `04-tanzania-niche/keywords/*.csv` bands | Fabricate exact MSV |8081### Step 3 — Collect Evidence8283**Primary (LLM-first):** Use `read_url_content` or direct page fetch for baseline reasoning.8485**Deterministic verification (when script execution is available):**8687```bash88# Fetch and parse page HTML89python3 <SKILL_DIR>/scripts/fetch_page.py <url> --output /tmp/safari-page.html90python3 <SKILL_DIR>/scripts/parse_html.py /tmp/safari-page.html --url <url> --json9192# Tanzania-specific audit runner93python3 <SKILL_DIR>/scripts/seo-audit.py <url> --json9495# Core Web Vitals (mobile-first — safari travelers book on phones)96python3 <SKILL_DIR>/scripts/pagespeed.py <url> --strategy mobile --json9798# Robots, security, redirects99python3 <SKILL_DIR>/scripts/robots_checker.py <url>100python3 <SKILL_DIR>/scripts/security_headers.py <url>101python3 <SKILL_DIR>/scripts/redirect_checker.py <url>102103# Schema validation against repo templates104python3 <SKILL_DIR>/scripts/validate_schema.py <file_or_url>105python3 <SKILL_DIR>/scripts/generate-schema.py --template touristtrip --input tour.yaml --json106107# Sitemap analysis108python3 <SKILL_DIR>/scripts/sitemap_checker.py <url>109python3 <SKILL_DIR>/scripts/sitemap-gen.py --urls urls.txt --output sitemap.xml110111# Images (hero photos dominate LCP on safari sites)112python3 <SKILL_DIR>/scripts/image_inventory.py <url> --json113python3 <SKILL_DIR>/scripts/image_weight_audit.py <url> --json114115# Local SEO signals116python3 <SKILL_DIR>/scripts/local_seo_checker.py <url> --json117118# Hreflang for multilingual operator sites119python3 <SKILL_DIR>/scripts/hreflang_checker.py <url> --json120121# Readability and content depth122python3 <SKILL_DIR>/scripts/readability.py /tmp/safari-page.html --json123python3 <SKILL_DIR>/scripts/article_seo.py <url> --keyword "<target_keyword>" --json124125# Broken links (critical on itinerary pages with many internal links)126python3 <SKILL_DIR>/scripts/broken_links.py <url> --workers 5127128# AI search readiness129python3 <SKILL_DIR>/scripts/llms_txt_checker.py <url>130python3 <SKILL_DIR>/scripts/citation_readiness.py <url> --json131```132133> Do not use third-party mirrors (e.g., `r.jina.ai`) as primary evidence when direct fetch or bundled scripts are available.134135If a script fails (network, timeout, missing dependency), report as **environment limitation** — not a confirmed site issue. Continue with LLM analysis at `Likely` confidence.136137### Step 4 — Delegate to Specialist Agents138139For comprehensive audits, adopt the relevant agent role from `resources/agents/`:140141| Agent | File | Focus |142|-------|------|-------|143| Technical SEO | [safari-technical.md](resources/agents/safari-technical.md) | Crawlability, CWV, mobile, JS rendering |144| Content Quality | [safari-content.md](resources/agents/safari-content.md) | E-E-A-T, experience signals, thin content |145| Schema Markup | [safari-schema.md](resources/agents/safari-schema.md) | TouristTrip, Product, TouristAttraction |146| Local SEO | [safari-local.md](resources/agents/safari-local.md) | GBP, NAP, Arusha/Moshi citations |147| Performance | [safari-performance.md](resources/agents/safari-performance.md) | LCP heroes, INP on booking widgets |148| Verifier | [safari-verifier.md](resources/agents/safari-verifier.md) | Deduplicate, validate evidence, suppress contradictions |149| Tanzania Niche | [tanzania-niche.md](resources/agents/tanzania-niche.md) | Migration timing, routes, fees, seasonality |150151### Step 5 — Apply Repo Quality Gates152153| Resource | Path | Use for |154|----------|------|---------|155| Meta tag formulas | `01-onpage-content/meta-tags-guide.md` | Title/description patterns |156| Page architecture | `01-onpage-content/page-architecture.md` | Hub-and-spoke tour/destination structure |157| Internal linking | `01-onpage-content/internal-linking.md` | Blog → tour → destination flows |158| Content briefs | `01-onpage-content/content-briefs/` | Kilimanjaro, Serengeti, Ngorongoro templates |159| Schema templates | `02-technical/schema/` | JSON-LD with `{{PLACEHOLDER}}` syntax |160| Crawl checklist | `02-technical/crawl-checklist.md` | Indexing gates |161| CWV thresholds | `02-technical/core-web-vitals.md` | LCP/INP/CLS targets |162| Hreflang guide | `02-technical/hreflang-i18n.md` | EN/DE/FR/SW patterns |163| GBP guide | `03-local/google-business-profile.md` | Operator categories, service areas |164| Seasonality | `04-tanzania-niche/seasonality.md` | Content calendar timing |165| Search intent | `04-tanzania-niche/search-intent-by-park.md` | Info vs commercial routing |166| Glossary | `04-tanzania-niche/glossary.md` | Swahili terms, TANAPA/TATO/KPAP |167| Competitor patterns | `04-tanzania-niche/competitor-patterns.md` | SERP observation framework |168| Launch checklists | `checklists/` | Tour page, destination, monthly SEO |169170### Step 6 — Verify Findings171172```bash173python3 <SKILL_DIR>/scripts/finding_verifier.py --findings-json <raw_findings.json> --json174```175176Use verified output for final report tables. Cross-check Tanzania-specific claims against `references.md` authorities.177178### Step 7 — Score and Report179180#### Tanzania Safari Scoring Weights (Full Audit)181182> **Canonical source of truth** — defined here and mirrored in `resources/skills/safari-audit.md`.183184| Category | Weight | Rationale |185|----------|--------|-----------|186| Content Quality & E-E-A-T | 22% | Trust-critical YMYL-adjacent travel queries |187| Technical SEO | 18% | Mobile booking, crawlability, indexation |188| On-Page SEO | 15% | Title/meta/H1 for competitive safari SERPs |189| Schema / Structured Data | 15% | TouristTrip, Product, Offer rich results |190| Local SEO & Trust | 12% | Arusha/Moshi operators depend on local + GBP |191| Performance (CWV) | 8% | Hero images and booking widgets affect CWV |192| Image Optimization | 5% | Wildlife photos are primary content |193| AI Search Readiness (GEO) | 5% | Growing AI travel research channel |194195#### Score Interpretation196197| Score | Rating |198|-------|--------|199| 90-100 | Excellent |200| 70-89 | Good |201| 50-69 | Needs Improvement |202| 30-49 | Poor |203| 0-29 | Critical |204205### Step 8 — Mandatory Deliverables206207For `safari audit`, `safari page`, and generic `perform seo analysis on <url>` flows:2082091. Create `FULL-AUDIT-REPORT.md` at audit start; update as evidence arrives2102. Create `ACTION-PLAN.md` at audit start; prioritize Critical → High → Medium → Low2113. List all generated artifact paths in the final response2124. Include **Environment Limitations** section if scripts were blocked2135. Flag any unverified fee/visa claims with `⚠️ VERIFY AT SOURCE`214215#### Report Severity Levels216217- 🔴 **Critical** — Blocks indexing, violates structured data policy, or misstates fees/visas218- ⚠️ **Warning** — Optimization opportunity (fix within 1 month)219- ✅ **Pass** — Meets or exceeds standards220- ℹ️ **Info** — Not applicable or informational221222---223224## Tanzania Page-Type Detection225226Auto-detect page type to apply correct checks:227228| Signals | Page Type | Sub-Skill | Min Words |229|---------|-----------|-----------|-----------|230| Price, duration, itinerary, "book now" | Tour package | `safari-tour-page.md` | 800+ |231| Park name, wildlife, best time, no price | Destination hub | `safari-destination.md` | 1,200+ |232| Route comparison, packing list, how-to | Informational blog | `safari-content.md` | 1,500+ |233| Company name, team, licenses, contact | Operator brand | `safari-local.md` | 500+ |234| `/de/`, `/fr/`, `hreflang` | International | `safari-hreflang.md` | — |235236## Schema Templates (Repo)237238Pre-built JSON-LD in `02-technical/schema/`:239240| Template | Page Type |241|----------|-----------|242| `touristtrip.json` + `product-offer-tour.json` | Multi-day safari/trek packages |243| `touristattraction.json` | Park/destination hubs |244| `organization-travelagency.json` | Operator footer sitewide |245| `review-aggregaterating.json` | First-party reviews only |246| `breadcrumblist.json` | All pages with URL depth |247| `faqpage.json` | FAQ sections (note: rich results restricted for commercial FAQ schema — use for content structure, not rich result expectation) |248249Generate programmatically:250```bash251python3 <SKILL_DIR>/scripts/generate-schema.py --template product-offer-tour --input tour.yaml252```253254Validate before publish:255```bash256# Rich Results Test: https://search.google.com/test/rich-results257python3 <SKILL_DIR>/scripts/validate_schema.py templates/tour-page.html258```259260---261262## Critical Rules (Tanzania Safari)2632641. **INP not FID** — INP is the sole interactivity metric (FID removed September 9, 2024). Never reference FID.2652. **Never fabricate fees** — Cite `tanzaniaparks.go.tz` or `ncaa.go.tz` with retrieval date; use `⚠️ VERIFY` if live fetch failed.2663. **Never fabricate reviews in schema** — `AggregateRating` must reflect real first-party reviews only.2674. **FAQ schema is restricted** — FAQPage rich results limited to government/health authority sites. Commercial safari sites may use FAQ *content* structure without expecting FAQ rich results.2685. **HowTo schema is deprecated** — Never recommend for Kilimanjaro packing lists.2696. **JSON-LD only** — Never recommend Microdata or RDFa.2707. **Migration claims need dates** — Serengeti migration timing varies annually; cite general patterns from `04-tanzania-niche/seasonality.md`, avoid false precision ("crossing on July 15").2718. **Kilimanjaro route facts** — Seven official routes (Marangu, Machame, Lemosho, Shira, Rongai, Northern Circuit, Umbwe); success rates vary by operator — don't invent percentages without source.2729. **White-hat only** — Refuse PBNs, fake reviews, scraped aggregator content, AI doorway pages per park.27310. **Location page limits** — Warning at 30+ near-duplicate destination pages; hard stop at 50+.27411. **LLM-first, script-backed** — Always attempt scripts; never block report on single script failure.27512. **Mandatory file artifacts** — `FULL-AUDIT-REPORT.md` + `ACTION-PLAN.md` for audit flows.27613. **Commercial vs informational routing** — Route info queries to blogs (`safari-content`); commercial queries to tour pages (`safari-tour-page`) per `04-tanzania-niche/search-intent-by-park.md`.277278---279280## Dependencies281282```bash283pip install -r <SKILL_DIR>/scripts/requirements.txt284# Optional: Playwright for visual analysis285pip install playwright && playwright install chromium286```287288Local repo scripts (M4+): `seo-audit.py`, `sitemap-gen.py`, `generate-schema.py` — see `scripts/README.md`.