| name | seo-destination |
| description | Draft a tight-SEO Destination JSON file ready for Admin → Destinations → Import JSON. Use when the user gives facts about a place (national park, region, mountain, beach area) and wants a destination page with FAQs and gallery, or runs /seo-destination.
|
SEO Destination Generator
Turn raw facts about a place into a JSON file matching
boilerplates/destination.json. Destination pages target "X things to do
in Y" / "best time to visit Y" search intent and cross-link to tours,
guides, and articles set there.
Step 1: Gather facts
Use whatever the user supplied (location, best time to visit, altitude if
relevant, what tours operate there). Ask if the description content is too
thin to write a genuine page.
Step 2: Read the template
Read boilerplates/destination.json for the exact field shape.
Step 3: Write the JSON
Strip all _note* keys. Respect these hard DB limits — note destination
SEO limits differ from Tour/Guide/Article:
| Field | Model limit | SEO target |
|---|
name | 200 chars | |
location_name | 200 chars | |
altitude | 50 chars | |
best_time_to_visit | 200 chars | |
seo.meta_title | 100 chars (not 60 — Destination model differs from Tour/Guide) | keep it tight anyway, ~60 for SERP display, the extra room is a buffer not an invitation to pad |
seo.meta_description | no hard DB limit (TextField) | target under 155 for SERP display regardless |
seo.focus_keyword | 100 chars | e.g. "best time to visit Serengeti" |
FAQ question | 255 chars | |
gallery alt_text | 200 chars | |
SEO writing rules:
short_description feeds list views and can double as a meta description fallback — make it stand alone, not a teaser cut off mid-sentence.
faqs[]: write these as actual PAA (People Also Ask) targets — phrase questions the way people search them.
related_tours/related_guides/related_articles: only reference slugs that already exist; this is the cross-linking mesh for the location.
- Leave
"slug": "" unless updating an existing legacy URL.
Step 4: Validate before writing
Count characters yourself on meta_title (100) and check meta_description
reads well under ~155 chars even though the DB won't reject longer.
Step 5: Save and hand off
Write the finished JSON to boilerplates/generated/<slug-or-name>.json.
Tell the user:
- Where the file was saved.
- To upload at Admin → Destinations → Import JSON, Dry run first.
- That related tour/guide/article/tag slugs must already exist or they're silently skipped.