> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt. # Overview of SEO & GEO > Understand Fern's built-in features for search engine optimization (SEO) and generative engine optimization (GEO) to maximize the reach and discoverability of your documentation. Fern optimizes your documentation for both traditional search engines and AI-powered tools out of the box. SEO ensures your pages rank well in Google, Bing, and other search engines, while GEO (Generative Engine Optimization) ensures AI tools like ChatGPT, Claude, and Cursor can efficiently consume and reference your content. ## What Fern handles automatically Without any configuration, Fern generates meta tags, social previews, canonical URLs, [JSON-LD structured data](/learn/docs/seo/setting-seo-metadata#structured-data-json-ld), clean slugs, and AI-optimized content via [`llms.txt`](/learn/docs/ai-features/llms-txt) for every indexable page. Fern also generates a `sitemap.xml` for your documentation site that follows [Google's sitemap best practices](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap). Each page entry includes a `` timestamp that updates only when the page's content actually changes. Trivial formatting differences like whitespace or capitalization are ignored. These timestamps are invisible to readers and used exclusively by search engines to prioritize crawling recently updated pages. Sitemap timestamps are separate from the [`last-updated` frontmatter field](/learn/docs/configuration/page-level-settings#last-updated), which displays a visible date in the page footer for readers. A default `robots.txt` is served at the root of your site that allows all crawlers and points to your `sitemap.xml`. To opt in or out of specific AI crawlers, gate sensitive sections, or signal training and search preferences with the Cloudflare Content Signals Policy, [serve a custom `robots.txt`](/learn/docs/seo/robots-txt) instead. ### Sitemap implementation details Fern tracks content changes using two internal tables: one for URL slugs and one for markdown source files. Multiple source files (e.g., changelog entries) can map to a single slug. On each publish, the system: 1. Resolves each page to its URL slug from the navigation tree. 2. Computes a SHA-256 hash of each page's normalized markdown content. 3. Compares hashes against stored values — only changed or new pages are upserted, and stale entries are cleaned up. 4. Changelog entries map to their parent changelog page's slug since they render on a single page with hash fragments. Normalization strips whitespace, copyright symbols, and capitalization before hashing to avoid false-positive change detection from trivial formatting differences. The sitemap route fetches stored slug data, builds a URL-to-timestamp lookup, and adds the timestamp to each sitemap XML entry. If no data exists for a domain yet, the sitemap omits timestamps gracefully rather than failing. ## Customize your SEO When you want more control, you can configure: #### [SEO metadata](/learn/docs/seo/setting-seo-metadata) Configure titles, descriptions, and social previews for search engines #### [Slugs](/learn/docs/seo/configuring-slugs) Customize URL paths for clean, meaningful page addresses #### [Redirects](/learn/docs/seo/redirects) Set up redirects to preserve SEO equity when pages move #### [Custom robots.txt](/learn/docs/seo/robots-txt) Serve a custom `robots.txt` to control how search engines and AI crawlers access your content > Understand Fern's built-in features for search engine optimization (SEO) and generative engine optimization (GEO) to maximize the reach and discoverability of your documentation.