当ChatGPT、Claude或Perplexity回答"谁在波兰做eBPF安全工具"时,它们跑的不是PageRank。它们引用的是那些容易被摘录的源:干净的定义、明确的关系、结构化的事实。一个漂亮的、所有信息都藏在JavaScript里的作品集页面,对它们来说等于隐形。

有人把整个网站托管在GitHub Pages上,没有后端,没有预算,却让机器读懂了它。这套方案的核心数字是:24条关于个人实体的三元组、42条以上技术三元组19条关于书系的三元组。这些不是给人看的,是给知识图谱嚼的。

答案引擎不按Google的方式读你的网站

搜索正在裂成两半:经典索引和答案引擎。前者你熟悉,后者不跑链接权重,只挑那些容易引用的源。所谓容易引用,指的是实体定义清晰、关系显式、事实结构化。

问题在于,大多数个人网站把这些东西都"隐含"在代码里。JavaScript渲染出来的内容,爬虫抓不到。你写得再漂亮,答案引擎也看不见。

这套方案要解决的就是这件事:在零预算的前提下,让网站变得机器可读。

第一层:llms.txt 和 llms-full.txt,相当于一张实体名片

在域名根目录放两个文件。第一个是 llms.txt,一份简洁的地图:我是谁、规范链接、项目列表加一行描述。它遵循 llmstxt 规范——H1写名字,blockquote写摘要,H2分节放Markdown链接。

第二个是 llms-full.txt,长文形式:每个项目的架构笔记,以及最关键的部分——主语-谓语-宾语三元组。个人实体24条,技术类42条以上,书系19条。

三元组正是知识图谱的构建格式。你等于提前把实体抽取这件事替爬虫做了。这里有个心态转变:别只写给读者看,也要开始写"断言"。

第二层:JSON-LD,一个@graph,一个真相源

每个页面都带一个 Person 节点,配一个稳定的 @id。项目页面带 SoftwareApplication 节点,通过 @id 引用那个 Person,而不是把数据重复一遍。书籍站点带 BookSeries 指向3个 Book 节点,每个带ASIN。

交叉引用比单个节点更重要。author、creator、sameAs(GitHub、dev.to)这些字段,才是让爬虫把GitHub上的某个人和书籍站点上的同一个人拼成一个实体的关键。

在Docusaurus上,docusaurus.config.ts 里的 headTags 在每次构建时注入这些内容,JSON从 static/schema/ 读取。不需要插件,运行时不需要JavaScript。

第三层:robots.txt,明确邀请AI爬虫

默认的 User-agent: * 块并不总能覆盖AI爬虫。要把它们一个个点名:

  • User-agent: GPTBot → Allow: /
  • User-agent: ClaudeBot → Allow: /
  • User-agent: PerplexityBot → Allow: /
  • User-agent: Google-Extended → Allow: /

逻辑很直白:想被引用,就允许引用引擎进来。反过来,如果你要保护付费内容,那就反过来设——但设完之后别纳闷为什么自己不在答案里。

第四层:IndexNow,跳过爬取队列

IndexNow 支持 Bing、Yandex、Seznam、Naver,接受一个变更URL的JSON POST,把索引时间从几周压到几小时。那个"key"不是秘密,它是一个控制权证明令牌,公开放在 /.txt 就行。

一个30行的GitHub Action,每次push时ping整个sitemap,每周再跑一次。没有后端,没有预算,靠的就是把该做的结构化工作做在前面。

整套方案没有一项需要花钱。它需要的只是换一个视角:你的网站不只是给人读的,也是给机器读的。而机器读得懂的前提,是你先把话说清楚。