律所官网每天被各种法律问题找上门:离婚冷静期怎么算、试用期被辞退有没有赔偿、合同违约金上限是多少。但很多律所发现,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 抓取(比如客户案例、内部资料),可以用 noindexDisallow 单独处理。但法律问答页、律师简介页、服务领域页应全部放行。

同时检查 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>

这里的 nametext 必须与页面上用户看到的问题和答案逐字一致。如果 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 链接,能帮助爬虫更快发现新页面。

发布检查单

每次发布或更新法律问答页,按这个清单逐项确认:

  1. 打开页面源代码,确认 <main><article> 中有完整正文,不是 JS 占位符。
  2. 检查 robots.txt,确认 GPTBotPerplexityBot 没有被 Disallow
  3. 查看 meta robots,确认不是 noindex
  4. 用浏览器开发者工具查看页面发出的 XHR 请求,确认正文不是异步加载。
  5. 在页面中查找 application/ld+json,确认存在 FAQPage 或 LegalService 标记。
  6. 逐字比对 JSON 中的 name 与页面可见问题,text 与页面可见答案。
  7. 检查律师个人页的 knowsAbout 是否填写了准确的专业领域。
  8. 用 Google 富媒体搜索结果测试工具验证 Schema 是否能被解析。
  9. 确认 sitemap.xml 包含该页 URL,且 URL 返回 200。
  10. 发布后等 24 小时,在 ChatGPT 或 Perplexity 中搜索相关法律问题,观察是否出现你的律所名或 URL。

如果第 10 步没有出现,不要急着改内容。先回到第 1 步,确认爬虫真的抓到了页面。很多失败案例都是抓取问题,而不是内容问题。

还容易问的

放行 GPTBot 后,AI 就一定会引用我的律所吗?
不一定。放行只是让 AI 能读取你的页面。是否引用还取决于页面内容是否直接回答了用户问题、是否与问题相关、以及是否有足够的权威信号。

Schema.org 标记越多越好吗?
不是。只标记与页面内容相符的类型。如果页面不是 FAQ,不要硬套 FAQPage。过多不相关的标记会被视为垃圾结构化数据。

法律问答页需要加作者和更新日期吗?
建议加。在 ArticleWebPage 类型中补充 authordatePublisheddateModified,能让 AI 判断内容的新鲜度和可信度。

如果律所官网是第三方模板,不能改源码怎么办?
联系建站服务商确认是否支持自定义 robots.txt 和 JSON-LD。大多数 WordPress 或 Shopify 建站都能通过插件添加结构化数据。如果完全不能改,考虑把关键法律问答发布到结构化数据完整的子域名或独立页面。

Perplexity 和 ChatGPT 使用同一个爬虫吗?
不是。Perplexity 使用自己的爬虫,OpenAI 使用 GPTBot。两个都要放行。

更多 GEO 基础概念可参考本站的 GEO 专栏,以及 SEO 与 GEO 的区别