律所官网每天被各种法律问题找上门:离婚冷静期怎么算、试用期被辞退有没有赔偿、合同违约金上限是多少。但很多律所发现,AI 法律问答里引用的总是那几家大所,自己的官网连个链接都拿不到。问题往往不在内容质量,而在抓取和结构数据:GPTBot 被 robots.txt 挡住了,页面正文藏在 JavaScript 后面,或者 Schema 标记与实际文字对不上。
这篇文章写给能改官网的人:从 HTML 源码检查到发布验证,一步步让搜索爬虫和生成式引擎真正读到你的法律问答正文。不需要虚构任何数据,只讲可执行的动作。
先确认正文在 HTML 里
打开律所官网的法律问答页,右键查看源代码。如果正文不在 HTML 里,而是通过 JavaScript 动态加载,GPTBot 和传统爬虫可能只抓到一个空壳。很多律所官网用单页应用框架,FAQ 内容靠异步请求填充,爬虫只拿到一个 <div id="app"></div>。
检查方法:在浏览器里禁用 JavaScript 后刷新页面,如果正文消失,就需要改成服务端渲染(SSR)或预渲染静态 HTML。对于法律问答这类常青内容,最稳妥的方式是直接输出静态 HTML,或者用 Node.js 的 renderToString 在服务端生成完整 DOM。
如果律所官网由第三方建站工具搭建,先确认该工具是否默认输出静态 HTML。很多 SaaS 建站平台已经支持 SSR,但需要手动开启。如果不能改,至少把最重要的问答内容做成单独的静态页面,而不是放在复杂的单页应用里。
- 查看源代码,确认
<article>或<main>里包含完整问题与回答。 - 用浏览器插件禁用 JavaScript 测试。
- 若是 WordPress,检查是否被某个页面构建器把文字包进 JSON 数据。
- 若正文缺失,联系开发团队启用 SSR 或静态导出。
放行与屏蔽
robots.txt 是给爬虫的通行证。GPTBot 是 OpenAI 的爬虫,Perplexity 使用自己的爬虫,Google 使用 Googlebot。律所官网若想被 AI 引擎引用,必须明确放行 GPTBot 和 PerplexityBot,同时保留对 Googlebot 的抓取。
在 robots.txt 中添加以下规则:
User-agent: GPTBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Googlebot
Allow: /
如果律所不希望某些页面被 AI 抓取(比如客户案例、内部资料),可以用 noindex 或 Disallow 单独处理。但法律问答页、律师简介页、服务领域页应全部放行。
同时检查 meta robots 标签。有些律所页面会带上 noindex,nofollow,这会让所有引擎都不收录。确认法律问答页的 meta robots 是 index,follow,或者直接移除这个标签。
注意:不要把 GPTBot 和 Googlebot 混为一谈。Googlebot 的抓取影响搜索排名,GPTBot 影响 AI 引用。两者都要放行。
结构化数据与可见文字一致
结构化数据用 Schema.org 标记页面内容,告诉机器“这段文字是一个法律问答”“这个作者是律师”“这个组织是律所”。只有标记与实际可见文字完全一致时才有效。
律所官网最常用的 Schema 类型:
| Schema 类型 | 适用页面 | 关键字段 |
|---|---|---|
| FAQPage | 法律问答页 | mainEntity, question, acceptedAnswer |
| LegalService | 服务领域页 | name, description, areaServed, provider |
| Attorney | 律师个人页 | name, jobTitle, knowsAbout, alumniOf |
| Organization | 官网首页 | name, legalName, address, sameAs |
以「离婚冷静期怎么算」为例,FAQPage 标记应长这样:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "离婚冷静期怎么算?",
"acceptedAnswer": {
"@type": "Answer",
"text": "自婚姻登记机关收到离婚登记申请之日起三十日内,任何一方不愿意离婚的,可以向婚姻登记机关撤回离婚登记申请。"
}
}]
}
</script>这里的 name 和 text 必须与页面上用户看到的问题和答案逐字一致。如果 JSON 里写的是“离婚冷静期如何计算”,页面显示的是“离婚冷静期怎么算”,机器会认为不一致,可能忽略整个标记。
同时检查律师个人页的 knowsAbout 字段。比如一位律师专长劳动法,就写 "knowsAbout": ["劳动法", "劳动合同", "劳动争议"]。这能帮助 AI 判断这位律师是否适合回答相关问题。
常见翻车
律所官网在抓取和结构数据上最容易踩这几个坑:
- robots.txt 挡住了 GPTBot:很多网站的 robots.txt 是从旧模板复制的,只放行 Googlebot,导致 AI 引擎完全无法抓取。
- 正文藏在 JS 里:法律问答页用 React 或 Vue 加载,源代码里只有脚手架。
- Schema 标记与页面文字不一致:JSON-LD 里写的是官方术语,页面写的是口语化问题。
- FAQPage 标记包含隐藏文字:有些页面为了 SEO 在 JSON 里塞了用户看不到的答案,这是欺骗性做法,会被引擎降级。
- 律师个人页没有 knowsAbout:AI 无法判断这位律师的专业领域,自然不会在相关法律问题里引用。
- Organization 标记地址不统一:官网首页写“北京市朝阳区”,百科写“北京朝阳”,AI 会认为这是两个实体。
还有一个隐蔽问题:律所官网的 sitemap.xml 没有提交给搜索控制台,或者 sitemap 里全是旧 URL。定期更新 sitemap,删除 404 链接,能帮助爬虫更快发现新页面。
发布检查单
每次发布或更新法律问答页,按这个清单逐项确认:
- 打开页面源代码,确认
<main>或<article>中有完整正文,不是 JS 占位符。 - 检查 robots.txt,确认
GPTBot和PerplexityBot没有被Disallow。 - 查看 meta robots,确认不是
noindex。 - 用浏览器开发者工具查看页面发出的 XHR 请求,确认正文不是异步加载。
- 在页面中查找
application/ld+json,确认存在 FAQPage 或 LegalService 标记。 - 逐字比对 JSON 中的
name与页面可见问题,text与页面可见答案。 - 检查律师个人页的
knowsAbout是否填写了准确的专业领域。 - 用 Google 富媒体搜索结果测试工具验证 Schema 是否能被解析。
- 确认 sitemap.xml 包含该页 URL,且 URL 返回 200。
- 发布后等 24 小时,在 ChatGPT 或 Perplexity 中搜索相关法律问题,观察是否出现你的律所名或 URL。
如果第 10 步没有出现,不要急着改内容。先回到第 1 步,确认爬虫真的抓到了页面。很多失败案例都是抓取问题,而不是内容问题。
还容易问的
放行 GPTBot 后,AI 就一定会引用我的律所吗?
不一定。放行只是让 AI 能读取你的页面。是否引用还取决于页面内容是否直接回答了用户问题、是否与问题相关、以及是否有足够的权威信号。
Schema.org 标记越多越好吗?
不是。只标记与页面内容相符的类型。如果页面不是 FAQ,不要硬套 FAQPage。过多不相关的标记会被视为垃圾结构化数据。
法律问答页需要加作者和更新日期吗?
建议加。在 Article 或 WebPage 类型中补充 author、datePublished、dateModified,能让 AI 判断内容的新鲜度和可信度。
如果律所官网是第三方模板,不能改源码怎么办?
联系建站服务商确认是否支持自定义 robots.txt 和 JSON-LD。大多数 WordPress 或 Shopify 建站都能通过插件添加结构化数据。如果完全不能改,考虑把关键法律问答发布到结构化数据完整的子域名或独立页面。
Perplexity 和 ChatGPT 使用同一个爬虫吗?
不是。Perplexity 使用自己的爬虫,OpenAI 使用 GPTBot。两个都要放行。
更多 GEO 基础概念可参考本站的 GEO 专栏,以及 SEO 与 GEO 的区别。