# Fern Docs

> Build beautiful documentation websites with Fern.
```

**Section** — The two files differ:

<CodeBlocks>
  ```txt title=".../section/llms.txt"
  - [Fern Docs](https://example.com/docs): Build beautiful documentation websites with Fern.
  ```

  ```txt title=".../section/llms-full.txt"
  # Fern Docs

  > Build beautiful documentation websites with Fern.
  ```
</CodeBlocks>

## Filter output

Filter `llms.txt` and `llms-full.txt` output with the `lang` and `excludeSpec` query parameters to reduce token usage. Parameters can also be combined.

```txt Example
/llms.txt?lang=python
/llms-full.txt?excludeSpec=true
/llms-full.txt?lang=python&excludeSpec=true
```

<ParamField path="lang" type="'node' | 'python' | 'java' | 'ruby' | 'go' | 'csharp' | 'swift'">
  Filter SDK code examples to a specific language. Common aliases are also accepted: `javascript`, `typescript`, `js`, `ts`, `py`, and `golang`. Case-insensitive.
</ParamField>

<ParamField path="excludeSpec" type="boolean">
  Exclude OpenAPI and AsyncAPI specification sections.
</ParamField>

## Control visibility

You can exclude whole pages from LLM endpoints (`llms.txt` and `llms-full.txt`) by [adding `noindex: true`](/learn/docs/seo/setting-seo-metadata#noindex) to the page's frontmatter. Pages marked `noindex` are hidden from your documentation site’s navigation and not indexed by search engines but can still be accessed directly by URL.

```mdx docs/pages/internal-notes.mdx
---
title: Internal notes
noindex: true
---
```

Within pages, use `<llms-only>` and `<llms-ignore>` tags to control what content is exposed to AI versus human readers on your documentation site. These tags affect all Markdown output intended for AI consumption: LLM endpoints, [Copy page, and View as Markdown](/learn/docs/configuration/site-level-settings#page-actions-configuration).

<AccordionGroup>
  <Accordion title="Content for AI only" toc={true}>
    Use the `<llms-only>` tag to show content to AI but hide it from human readers on your documentation site. This is useful for:

    * Technical context that's verbose but helpful for AI, like implementation details or architecture notes
    * Code-related metadata that would clutter the human UI
    * Cross-references that help AI understand relationships between pages

    ```jsx docs/getting-started.mdx
    <llms-only>
      This technical context is only visible to AI, not on your documentation site.
    </llms-only>
    ```
  </Accordion>

  <Accordion title="Content for humans only" toc={true}>
    Use the `<llms-ignore>` tag to show content to human readers on your documentation site while hiding it from AI. This is useful for:

    * Marketing CTAs or promotional content
    * Navigation hints meant only for human readers
    * Internal comments that should remain only in source files

    ```markdown docs/getting-started.mdx
    <llms-ignore>
    {/* TODO: Update this section after v2 launch */}
    </llms-ignore>

    ## Authentication

    To authenticate your requests, include your API key in the header.

    <llms-ignore>
      <Callout intent="info">
        Need an API key? [Sign up for free](https://example.com/signup) to get started.
      </Callout>
    </llms-ignore>
    ```
  </Accordion>
</AccordionGroup>

## Analytics and monitoring

The [Fern Dashboard](https://dashboard.buildwithfern.com/) provides comprehensive analytics for `llms.txt` usage including:

* Traffic by LLM provider (Claude, ChatGPT, Cursor, etc.)
* Page-level breakdowns of bot vs. human visitors for Markdown and `llms.txt` files

This visibility helps you understand LLM traffic patterns and optimize your documentation for AI consumption.