Skip to content

Put countries in the navigation, and give search engines a sitemap - #260

Open
engleek wants to merge 1 commit into
feat/country-overviewfrom
feat/countries-nav-sitemap
Open

engleek wants to merge 1 commit into
feat/country-overviewfrom
feat/countries-nav-sitemap

Conversation

@engleek

@engleek engleek commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Last part of #258. Stacked on #256 (it touches /countries, which #256 also changes); it retargets to main once #256 merges.

  • "Countries" in the navigation, desktop and mobile.
  • /countries lists countries by name ("France: 635 studios · 73 associations") instead of bare codes ("FR"), biggest scenes first. The counting is in the app instead of raw SQL, and the loader's leftover console.log of every country is gone. The title is now "Indie game scenes, country by country".
  • /sitemap.xml: the main pages, every country the country page knows, and every game (not deleted), organisation and event, each with lastmod (buildSitemap, unit-tested). Cached for an hour. On the local copy of production data that's 3,295 URLs, and the XML is valid.
  • /robots.txt: keeps crawlers out of /admin/, /auth/, /profile and /logout, and points to the sitemap. It's a route rather than a static file, so the sitemap line carries the real origin: BASE_URL, or the request's.

After deploying, submitting the sitemap in Google Search Console (and Bing Webmaster Tools) speeds up indexing. That needs ownership of the domain, so it's a manual step.

Tests

  • Unit: the sitemap's entries, dates and escaping; robots' sitemap line and disallows.
  • e2e: "Countries" in the navigation leads to a list of names; robots.txt → sitemap.xml lists countries, games, organisations and events.
  • build ✅, vitest 146/146 ✅, Playwright 76/76 ✅

🤖 Generated with Claude Code

#258: country pages are meant to be found, by people and in search.

- "Countries" joins the navigation (desktop and mobile).
- /countries lists countries by name, with their studios and
  associations, biggest scenes first, instead of bare codes. Counted in
  the app instead of raw SQL, and without the loader's debug log.
- /sitemap.xml lists the main pages, every country with something placed
  in it, and every game, organisation and event, with when each changed
  (buildSitemap). Cached for an hour.
- /robots.txt keeps crawlers out of account and admin pages and points to
  the sitemap. A route, so the sitemap line has the real origin
  (BASE_URL, or the request's).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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