Skip to content

feat: serve /llms.txt for AI answer engine discovery - #37

Merged
Manuel10i merged 1 commit into
mainfrom
feat/llms-txt-ai-discovery
Aug 20, 2026
Merged

Manuel10i merged 1 commit into
mainfrom
feat/llms-txt-ai-discovery

Conversation

@Manuel10i

Copy link
Copy Markdown
Owner

Problem

The PackedPlaces distribution/content cluster (the 6 /guides/* link-magnets, /crowd-index, /least-crowded and its 12 month hubs) still shows ~0 impressions in Search Console: it needs external pull, not more internal links. Meanwhile AI answer engines (ChatGPT, Perplexity, Claude, Copilot) increasingly answer exactly the queries this site is built for ("best time to visit X", "less crowded alternatives to Venice", "when is Hallstatt crowded"), and PackedPlaces has data those engines cannot get elsewhere: a transparent, per-month crowd model for 700+ destinations.

The site had no /llms.txt, so there was nothing telling those crawlers what the site is or which pages to cite.

Change

Adds a curated /llms.txt (the llmstxt.org convention) as a dynamic route handler at src/app/llms.txt/route.ts, mirroring the existing robots.ts / sitemap.ts pattern (same BASE_URL, text/plain response). It gives AI answer engines a concise, self-describing index:

  • the crowd map, and the best-time / least-crowded / crowd-index hubs
  • a few example destination pages, plus a pointer to the full sitemap
  • all six "less crowded alternatives" editorial guides
  • how the crowd data is measured (feature pages) and an attribution note

The guide list is read from the same guides registry the sitemap uses, so it stays in sync automatically as guides are added. Nothing here is a hand-typed crowd figure; the linked pages compute their numbers from the dataset at build time.

Why this is Off-Page / distribution

This is an AI-answer-engine discovery surface, not another internal-link page. It is aimed at getting the site (especially the orphaned guides cluster) cited in AI answers for its core intents, independent of Google backlink authority. It is an emerging channel with no guaranteed consumption by any single engine, but it is zero-risk, low-maintenance and idiomatic: a sensible cheap bet for a site whose unique asset is structured, citable data.

Verified

  • tsc --noEmit, eslint, prettier --check: clean
  • new src/app/__tests__/llms.test.ts (4 tests) green; full app test suite 34/34 green
  • next build compiled and registered the route (llms.txt)
  • prod render (next start): GET /llms.txt returns 200 + Content-Type: text/plain; charset=utf-8, body starts with # PackedPlaces, all six guides listed
  • no em-dashes / en-dashes in the output (asserted by a test)

Does not touch existing routes; one new route + one test file.

Adds a curated /llms.txt (llmstxt.org convention) as a dynamic route
handler, matching the existing robots.ts/sitemap.ts pattern. It gives
AI answer engines a concise, self-describing index of the site: the
crowd map, the best-time / least-crowded / crowd-index hubs, example
destination pages and the "less crowded alternatives" editorial guides.

The guide list is read from the same registry as the sitemap, so it
never drifts out of sync. Nothing is a hand-typed crowd figure; the
linked pages compute their numbers from the dataset.

Verified: tsc + eslint + prettier clean; new vitest suite (4 tests)
green; full app test suite 34/34 green; next build compiled and
registered the route; prod render of /llms.txt returns 200 with
Content-Type text/plain and all six guides listed. No em-dashes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Manuel10i
Manuel10i merged commit 0792165 into main Aug 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant