> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cfosilvia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Seo and routing

# Blog SEO and Routing

## Routes

* `/blog`
* `/blog/[slug]`

## URL contract

* `/blog?page=2`
* `/blog?category=investing`
* `/blog?q=retirement`
* Combinations are supported and preserved in pagination links

## Index page SEO behavior

* Canonical URL always points to `/blog`
* Filtered and paginated index states are marked `noindex`
* Default unfiltered page 1 remains indexable
* Category tabs and the Previous / Next pagination controls are crawlable
  `<a href>` anchors carrying `rel="prev"` / `rel="next"` — no JS is
  required to reach any filter state or paginated URL
* Search is a native GET form (`<form action='/blog'>`) so a search URL is
  bookmarkable, shareable, and crawlable
* On the canonical index the page emits three JSON-LD schemas (`Blog`,
  `ItemList`, `BreadcrumbList`) via `BlogIndexJsonLd`; filtered / paginated
  variants deliberately skip them (see `docs/blog/seo-infrastructure.md`)

## Article page SEO behavior

* Metadata is built from Sanity content
* `seoTitle` and `seoDescription` override title/excerpt when present
* Open Graph image uses the Sanity `mainImage` when available
* Fallback OG image is `/images/og-image.png`
* Article pages emit:
  * `ArticleJsonLd`
  * `BreadcrumbJsonLd`
* The visible “Back to blog” link returns to the directory. The Home → Blog
  → Article hierarchy remains in breadcrumb structured data. Related-post
  image cards are crawlable links into the full Sanity article archive.
* Author profile links use the Sanity `linkedinUrl` and `xUrl` destinations
  and open in a new tab; author `sameAs` structured data remains unchanged.
* Articles are authored as drafts in Sanity (Studio or MCP) and published by
  a human in the Studio. Sanity is the sole source for article content; the
  publish webhook revalidates affected routes and notifies IndexNow.
* Editorial CTA blocks are rendered as visible article content. Their product
  claims and destinations must be verified, but they do not change canonical,
  indexability, or routing behavior.

## Sitemap

`app/sitemap.ts` now includes:

* `/blog`
* every published Sanity blog slug when Sanity is configured

If Sanity is not configured, the sitemap excludes blog URLs to keep builds stable.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.