Skip to content

feat(seo): dynamic XML sitemap for events and blog posts - #93

Merged
Metrohan merged 3 commits into
mainfrom
feat/seo-dynamic-sitemap
Aug 3, 2026
Merged

feat(seo): dynamic XML sitemap for events and blog posts#93
Metrohan merged 3 commits into
mainfrom
feat/seo-dynamic-sitemap

Conversation

@Metrohan

@Metrohan Metrohan commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds GET /api/events/sitemap.xml — serves all active events and published blog posts as a standards-compliant XML sitemap (sitemaps.org 0.9 schema)
  • New app/services/sitemap_service.py builds the XML: 10 static landing pages with hand-tuned changefreq/priority, then dynamic event URLs (/etkinlik/{id}) with lastmod from last_seen_at, then blog post URLs (/blog/{slug})
  • Updates frontend/public/robots.txt to declare both sitemap URLs (/sitemap.xml prerender + /api/events/sitemap.xml dynamic)
  • 8 unit tests in tests/unit/test_sitemap_service.py — covers XML validity, static pages, event/post URL inclusion, lastmod formatting, special-char escaping

Test plan

  • pytest tests/unit/test_sitemap_service.py -v — 8 tests pass
  • curl http://localhost:8000/api/events/sitemap.xml returns Content-Type: application/xml with valid XML
  • curl https://eventradar.dev/robots.txt shows both Sitemap lines
  • Submit https://eventradar.dev/api/events/sitemap.xml to Google Search Console

🤖 Generated with Claude Code

Metrohan and others added 3 commits August 3, 2026 23:05
tasks/, justfile, AGENTS.md, scripts/create-*.sh and docs/CURRENT_STATE.md,
DECISIONS.md, TROUBLESHOOTING.md are meto-ai / Claude Code workflow files —
personal to the developer's tooling, not part of the project source.

Added to .gitignore; removed from tracking with git rm --cached (files
remain on disk).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds GET /api/events/sitemap.xml that serves all active events and
published blog posts as a standards-compliant XML sitemap. Static
landing pages are included with hand-tuned changefreq/priority.
Updates robots.txt to declare both sitemap URLs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Extracts injectJsonLd() helper into seo.js, then adds structured data
to all 5 category landing pages (CollectionPage schema) and BlogPage
(Blog schema with BlogPosting entries). Gives Google rich schema signals
on every major entry point beyond the already-covered EventDetailPage.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Metrohan
Metrohan merged commit ad3c8c8 into main Aug 3, 2026
4 checks passed
@Metrohan
Metrohan deleted the feat/seo-dynamic-sitemap branch August 3, 2026 20:39
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