---
title: llms.txt、robots.txt 与以 Markdown 提供页面
description: 智能体的阅读方式和浏览器不同。每个生成的网站都会提供：llms.txt、点名 AI 爬虫的政策，以及每个页面的 markdown 版本。
date: 2026-09-08
author: crea.site
tags: [seo, agents]
---

越来越多会听说某家小商家的人，永远不会访问它的网站。他们会去问模型，而模型只会根据它能读到的内容作答。

这让"智能体能读懂这个网站吗？"成为一个关乎获客的问题，而不是技术上的好奇。由此得出三件事，每个在这里生成的网站都会自动具备，无需你开口。

## robots.txt 应该点名 AI 爬虫

对它们只字不提，它们就会回落到 `User-agent: *`。那不是政策，只是你继承来的默认值。

所以我们点了它们的名。会把引用带回来的搜索和问答智能体：`OAI-SearchBot`、`ChatGPT-User`、`Claude-SearchBot`、`Claude-User`、`PerplexityBot`；以及训练爬虫：`GPTBot`、`ClaudeBot`、`Google-Extended`、`meta-externalagent`。它们每一个都沿用和其他所有人完全相同的 `Disallow` 列表：没有哪个爬虫能访问 API，也没有哪个爬虫能访问仅限会员的页面。

点名并不是为了放宽。而是让政策被写在一个可以被有意修改的地方。

## llms.txt 是目录，不是推销

[llms.txt](https://llmstxt.org) 的约定很简单：一个标题，一段放在引用块里的摘要，然后是带链接的分区。模型来到这里，应该一次请求就能知道这个网站是什么、重要页面在哪，无需渲染任何东西。

我们的 llms.txt 由网站定义生成，这比听上去重要得多。列表使用与 sitemap 相同的公开/私有规则进行过滤：

```
# Piekarnia Lune

> A sourdough bakery in Kraków. Bread baked daily, cakes to order,
> open from seven.

## Pages

- [Menu](https://...): What we bake, and what it costs.
- [Order a cake](https://...): Wedding and birthday cakes, two weeks' notice.
```

同一份列表被读取三次：sitemap、`llms.txt` 和 `robots` meta 标签。三者不可能不一致，因为根本没有需要同步的东西。

## 每个页面都有 markdown 版本

最容易被误读的方法，就是让读者从一整页版式里去找三句话。所以每个生成网站的每个页面，既能以 HTML 响应，也能以 markdown 响应：

- 发送 `Accept: text/markdown`，你会在同一个 URL 得到页面的 markdown 版本。
- 或者在路径后加上 `.md`，供许多不做内容协商的智能体使用。

保证它诚实的规则值得说明。它是_重写_，不是重定向。只有明确请求 `text/markdown` 时才会发生，绝不会因 `*/*` 而发生，因为发送"任意类型"的浏览器想要的是页面本身。两种响应都带有 `Vary: Accept`，所以共享缓存不会把同一个内容返回给所有人。并且 markdown 版本是 `noindex`，所以它不会在搜索中与它所复制的页面竞争。

序列化器遍历的是网站定义，而不是渲染后的 HTML，这就是输出如此干净的原因：功能区块变成列表，FAQ 变成标题和答案，价格表变成表格。地图或预约日历会变成一行如实说明有什么的文字，而不是编造它本来会显示什么。

## 我们自己也适用

本文在相同的 URL 后加 `.md` 就能获取。crea.site 上的其他每个页面也是如此，[我们自己的 llms.txt](/llms.txt) 列出了它们。

一个连自家页面都无法让智能体读懂的建站工具，就是在自己反驳自己。
