SEO and Sitemap
Bellamy Book exposes SEO endpoints for search engines: a sitemap (XML) and robots.txt. Both are public (no auth) and help index the site and blogs.
Overview
- Sitemap index:
https://bellamybook.com/sitemap.xml— Sitemap index that references:- sitemap-static.xml — Public marketing pages (
/, about, contact, pricing, team, docs, download, privacy-terms, bellamy). Does not list auth, help, or app routes. - sitemap-blogs.xml — Dynamic blog sitemap (proxied from backend):
/blogsand each published blog at/blogs/{slug}.
- sitemap-static.xml — Public marketing pages (
- Robots.txt: Served at
/robots.txt(proxied from backend). Allows public content; disallows/admin/,/api/(except sitemap),/settings/,/auth/,/help/,/feed/,/profile/, messaging/posts, verify-email, impersonate. Documents/llms.txt. Allows common AI crawlers. - Homepage SEO: Guests on
/see the marketing landing. Signed-in users go to the feed. Legacy/landing301 →/. Auth and private app paths usenoindex(meta + nginxX-Robots-Tag). - Privacy & Terms: Public page at
/privacy-terms(website, demo, and mobile app). Account deletion is/privacy-terms#account-deletion. - llms.txt:
https://bellamybook.com/llms.txtplus/llms-full.txtand/*.mdmirrors (X-Robots-Tag: noindexso HTML stays canonical). - Structured data: Organization + WebSite in
index.html; homepage adds SoftwareApplication; pricing adds FAQPage; blogs add BlogPosting + BreadcrumbList viaLandingPageSEO/BlogStructuredData.
API Endpoints (api/Sitemap)
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/Sitemap/sitemap.xml | Sitemap XML (application/xml). Blogs list + published blog URLs. |
| GET | /api/Sitemap/robots.txt | Robots.txt (text/plain). Allow/Disallow rules and Sitemap URL. |
Both endpoints are AllowAnonymous. Base URL for links is taken from AppSettings:BaseUrl (or request host if not set).
Improving indexing (Google & Bing)
- Submit
https://bellamybook.com/sitemap.xmlin Google Search Console and Bing Webmaster Tools. - Request indexing for
https://bellamybook.com/(homepage) after deploy. - Confirm
/landingreturns 301 → / and/auth/sign-inis noindex. - Re-scrape social previews after OG image changes (
/og-image.jpg).
Social sharing
- og:image / twitter:image:
https://bellamybook.com/og-image.jpg(1200×630, compressed JPEG) - Legacy PNG kept at
/og-image.pngfor old caches - Debugger tools: Facebook Sharing Debugger, LinkedIn Post Inspector
SEO checklist
| Item | Status |
|---|---|
Sitemap index at /sitemap.xml | ✅ Static + blogs only (no auth/help) |
| robots.txt | ✅ Disallow private surfaces; AI allow; llms.txt pointer |
| Homepage = marketing | ✅ / for guests; /landing 301 → / |
| Auth / app noindex | ✅ Meta + nginx X-Robots-Tag |
| Public privacy-terms | ✅ Real content + sitemap |
| llms.txt + md mirrors | ✅ Agent index; md noindex |
| Canonical + full OG/Twitter | ✅ LandingPageSEO / BlogDetail |
| og:image | ✅ Compressed JPEG 1200×630 |
| Structured data | ✅ Org, WebSite, SoftwareApplication (home), FAQPage (pricing), BlogPosting + Breadcrumb |
| 404 = noindex | ✅ NotFound page |
| CWV: no sitewide OG preload | ✅ Preload logo only |
When adding a new public page: add to sitemap-static.xml, register a public route, use LandingPageSEO with title, description, and canonicalPath.
Related
- Blogs — Published blogs are included in the sitemap
- Getting Started — Configuration — AppSettings:BaseUrl