> ## Documentation Index
> [HTML page](https://blode.md/docs/features/seo)
> [Documentation index](https://blode.md/docs/llms.txt)
> Use the index to discover all available pages before exploring further.

# SEO and sitemaps

Learn how Edda generates robots.txt, sitemaps, llms.txt exports, and per-page meta tags so search engines and AI crawlers can index your docs.

Edda automatically generates the files search engines and AI crawlers need to discover and index your documentation. You get sensible defaults out of the box, with options to customize behavior per page.

## Auto-generated files

Every deployed site includes these files at their standard paths:

- `/robots.txt` (type: Auto-generated): Standard robots file. Allows crawlers by default. Content-Signal preferences for search, AI input, and training are sent as an HTTP header.
- `/sitemap.xml` (type: Auto-generated): XML sitemap listing all public pages with last-modified dates.
- `/llms.txt` (type: Auto-generated): Plaintext summary of your documentation for AI crawlers.
- `/llms-full.txt` (type: Auto-generated): Complete documentation content in plaintext format.
- `/{page}.md` (type: Auto-generated): Individual pages in Markdown format for programmatic access.

> [!TIP]
> The `llms.txt` and `llms-full.txt` files follow the emerging [llms.txt
>   standard](https://llmstxt.org) for making documentation accessible to large
>   language models.

Append `.md` to any page URL to get its Markdown export. For example,
`/docs/quickstart` becomes `/docs/quickstart.md`. For what agents do with
these files, why the index matters more than the Markdown, and what to put in
each page's `description`, see [Docs for agents](/features/agent-readable-docs).

## Public URL

By default your site publishes at its Edda subdomain, or at your custom
domain once you add one. If you put a proxy in front: serving docs from
`yourdomain.com/docs` while we see `acme.blode.md`: declare where the site
actually lives:

```json docs.json
{
  "seo": {
    "siteUrl": "https://yourdomain.com/docs"
  }
}
```

Include the path prefix if you serve under one. Canonical tags, `og:url`,
JSON-LD, the sitemap, `llms.txt` and the `.md` alternates are all built from
this one value, so they stay consistent no matter which URL a request arrives
on.

> [!NOTE]
> You only need this when something sits between your readers and Edda. A proxy
>   is invisible to us: a proxied request is indistinguishable from a direct one:
>   so it is the only case we cannot work out on your behalf.

## Indexing mode

Control how search engines index your site with the `seo.indexing` option in `docs.json`:

```json title="Index all pages (default)"
{
  "seo": {
    "indexing": "all"
  }
}
```

```json title="Respect page-level noindex"
{
  "seo": {
    "indexing": "default"
  }
}
```

| Value       | Behavior                                                              |
| ----------- | --------------------------------------------------------------------- |
| `"all"`     | All pages are indexed. Page-level `noindex` frontmatter is ignored.   |
| `"default"` | Pages with `noindex: true` in frontmatter are excluded from indexing. |

## Page-level noindex

To exclude a specific page from search engine indexing, add `noindex: true` to its frontmatter:

```mdx title="internal-notes.mdx"
---
title: Internal notes
noindex: true
---

This page will not appear in search engine results.
```

## Last-modified timestamps

Enable last-modified metadata with the `metadata.timestamp` option. This adds `<meta>` tags and updates your sitemap entries with accurate dates:

```json title="docs.json"
{
  "metadata": {
    "timestamp": true
  }
}
```

> [!INFO]
> Timestamps are derived from your deployment history. Each page's last-modified
>   date reflects the most recent deploy that changed its content.