Skip to main content

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): /blogs and each published blog at /blogs/{slug}.
  • 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 /landing 301 → /. Auth and private app paths use noindex (meta + nginx X-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.txt plus /llms-full.txt and /*.md mirrors (X-Robots-Tag: noindex so HTML stays canonical).
  • Structured data: Organization + WebSite in index.html; homepage adds SoftwareApplication; pricing adds FAQPage; blogs add BlogPosting + BreadcrumbList via LandingPageSEO / BlogStructuredData.

API Endpoints (api/Sitemap)​

MethodEndpointDescription
GET/api/Sitemap/sitemap.xmlSitemap XML (application/xml). Blogs list + published blog URLs.
GET/api/Sitemap/robots.txtRobots.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)​

  1. Submit https://bellamybook.com/sitemap.xml in Google Search Console and Bing Webmaster Tools.
  2. Request indexing for https://bellamybook.com/ (homepage) after deploy.
  3. Confirm /landing returns 301 → / and /auth/sign-in is noindex.
  4. 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.png for old caches
  • Debugger tools: Facebook Sharing Debugger, LinkedIn Post Inspector

SEO checklist​

ItemStatus
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.