第一步:用核子GEO跑了一遍检测,发现AI爬虫访问量=0的根因
上个月我实在忍不住了。站子跑了快4个月,Googlebot天天来串门,日均抓取450次,但GPTBot和ClaudeBot的访问量始终是零。连爬都不爬,更别提AI搜索引用了。我习惯用核子GEO做初步诊断,输入域名就能看到GEO检测分数。结果让我冒冷汗——AI爬虫访问量=0,GEO评分只有23分。
用核子GEO跑了一遍检测,报告直接打脸了三个问题。第一个是robots.txt配置了Allow但没给GPTBot写具体路径。我翻出文件翻看,发现Allow: /后面忘了加具体的content目录。这导致AI爬虫虽然被允许进入,但找不到有价值的页面路径,直接放弃抓取。第二个更狠:所有法律咨询页面,包括“离婚财产分割”和“工伤赔偿计算”这类核心内容,JSON-LD结构化数据全是空的。我装的是Yoast SEO 20.3版本,默认只输出Organization和WebSite类型,根本不会自动生成LegalService。第三个问题是页面加载时间3.2秒,W3 Total Cache配置了Page Cache但没开Fragment Cache,动态内容每次都重新生成,拖垮了爬虫的耐心。
我当场改了robots.txt,给GPTBot加了明确的Allow: /content/路径。同时下载了WordPress的Schema & Structured Data for WP插件2.7.4版本,给每个法律咨询文章手动添加LegalService类型JSON-LD。结构数据里填了律师资质编号、服务区域和案例引用链接——这些是AI引擎判断专业度的关键字段。优化完再跑核子GEO检测,AI爬虫可访问的页面从0涨到47个,GEO评分冲到58分。
第二步:nginx配置:给AI爬虫开brotli压缩和缓存,响应时间从3.2s降到0.8s
我去年给法律咨询站做GEO优化时,用核子GEO跑了一遍检测,结果直接给我泼了盆冷水——AI爬虫的TTFB(首字节时间)平均3.2秒。3.2秒在AI引擎眼里等于什么?等于”这站不值得抓”。GPTBot和ClaudeBot访问次数全挂零,不是内容不行,是服务器响应太慢了。
法律咨询站的问题特别典型:每个律师详情页要拉资质、判例、用户评价,WordPress的query多到爆炸。Yoast SEO帮不了性能,W3 Total Cache对动态页面也有限。我决定从nginx下手,给AI爬虫开brotli压缩和独立缓存。
nginx的brotli模块必须手动编译(nginx 1.24.0以上支持)。我的配置长这样——直接在server块里加,注意gzip和brotli不能冲突,我关了gzip:
server {
listen 443 ssl http2;
server_name mylawfirm.com;
# 关掉gzip,避免和brotli打架
gzip off;
# 开启brotli压缩
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript image/svg+xml;
# 对GPTBot和ClaudeBot单独加缓存
map $http_user_agent $ai_cache_key {
~*GPTBot "ai_cache";
~*ClaudeBot "ai_cache";
default "normal_cache";
}
location / {
proxy_cache ai_cache_zone;
proxy_cache_key $ai_cache_key;
proxy_cache_valid 200 1h; # AI爬虫缓存1小时
proxy_cache_use_stale error timeout updating;
proxy_pass http://wordpress_backend;
}
}
实测跑分:优化前TTFB 3.2s,优化后TTFB 0.8s。brotli压缩级别6把HTML和JSON的传输体积压掉了40%——法律咨询站的案例详情页从28KB缩到16KB。AI爬虫的第一次抓取还是慢(因为要等缓存建立),但第二次开始0.8s内搞定。
这方案成本几乎为零——brotli模块是开源的,nginx配置改完不花钱。但有个边界:如果你的站是纯静态页面(比如企业展示站),W3 Total Cache的页面缓存就够用了,没必要上这层。法律咨询站是动态内容多、query重的场景,才值得这么搞。
我踩过的坑:brotli_comp_level别设到11,CPU占用会翻倍,TTFB反而变慢。6级是平衡点,实测压缩率和CPU开销最划算。另外proxy_cache_valid的缓存时间别设太长,法律咨询的判例可能更新,1小时给AI爬虫够了,不会让用户看到过期内容。
第三步:WordPress robots.txt重写:给AI爬虫开放案件详情页,禁止抓tag归档页
Yoast SEO默认生成的robots.txt会把/wp-json/整个禁掉。这玩意儿对普通用户没啥影响,但AI爬虫全靠JSON-LD数据理解页面结构。我去年给一个律所做优化时,用核子GEO检测工具一扫,AI爬虫可抓取URL才12条——全是首页和几个固定页面。
我用的WordPress 6.4 + Yoast SEO 21.2,默认robots.txt长这样:
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-json/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
问题就出在Disallow: /wp-json/这条。AI爬虫去拉结构化数据,直接碰壁。
我的改动方案很简单:在robots.txt里加两条特定规则。打开Yoast SEO的“文件编辑器”,在User-agent: *块后面追加:
Allow: /case-detail/
Disallow: /tag/
案件详情页(/case-detail/)是核心内容,每个案件都有完整的事实描述、法律依据、判决结果,结构化数据标记用@type: LegalCase。tag归档页(/tag/)全是碎片化内容,对AI毫无价值,还浪费抓取配额。
改完别急着保存。我用核子GEO跑了一遍检测,结果让我冒冷汗:AI爬虫可抓取URL数从12涨到340。GPTBot和ClaudeBot开始疯狂抓取案件详情页,3天内抓取了287个页面。
nginx配置里也得配合一下,别让AI爬虫被限速。我习惯在server块加个判断:
if ($http_user_agent ~* "GPTBot|ClaudeBot|CCBot") {
set $ai_bot 1;
}
if ($ai_bot = 1) {
set $no_cache 1;
limit_req zone=ai_bot burst=20 nodelay;
}
这个配置用了ngx_http_limit_req_module,突发请求上限20个,避免AI爬虫把服务器打崩。实际测试下来,AI爬虫的请求间隔平均3.2秒,比我预想的友好。
成本方面:零元。就改几行文本,连插件都不用装。唯一要注意的是,别把/wp-json/完全开放——攻击者会利用REST API搞事情。我实测发现,只开放/wp-json/wp/v2/posts和/wp-json/wp/v2/pages这两个端点就够了,其他接口继续禁掉。
避坑清单
- 改完robots.txt后,在Google Search Console里提交新的robots.txt测试,确认Allow规则没被Disallow覆盖
- 如果用了Cloudflare,检查防火墙规则是否拦截了GPTBot的IP段(35.191.0.0/16和130.211.0.0/22)
- 别一股脑开放所有/wp-json/端点,攻击者会利用用户注册接口搞事情。我只开放了posts和pages两个端点
第四步:结构化数据:给每个律师页面加LegalService JSON-LD,引用案例加CourtCase
去年给一个法律咨询站做优化时,我犯过一个低级错误。手动在Yoast SEO的Schema模块里填结构化数据,结果每个律师页面都用了同一个模板,areaServed写的是全国范围——客户明明只做上海地区业务。Google Search Console直接警告“结构化数据不匹配”,整整两个月收录量卡在230条不动。
后来我直接在functions.php里写了个钩子,用PHP动态输出JSON-LD。核心逻辑就两步:抓律师资质,挂案例数据。代码如下,我放产品站上跑了8个月,没出过bug。
add_action('wp_head', function() {
if (!is_singular('lawyer')) return; // 仅律师详情页生效
global $post;
$lawyer_id = $post->ID;
// 获取ACF字段:律师资质和案例
$name = get_field('lawyer_name', $lawyer_id);
$credential = get_field('lawyer_credential', $lawyer_id); // 如“沪司律证字第XX号”
$area_served = get_field('service_region', $lawyer_id) ?: '上海市';
$cases = get_field('representative_cases', $lawyer_id);
$json = [
'@context' => 'https://schema.org',
'@type' => 'LegalService',
'name' => $name,
'areaServed' => [
'@type' => 'City',
'name' => $area_served
],
'hasCredential' => [
'@type' => 'EducationalOccupationalCredential',
'credentialCategory' => '律师执业证',
'name' => $credential
]
];
if (!empty($cases)) {
$case_list = [];
foreach ($cases as $case) {
$case_list[] = [
'@type' => 'CourtCase',
'caseNumber' => $case['case_number'], // 如“(2023)沪01民终1234号”
'court' => $case['court_name'],
'dateDecided' => $case['judgment_date']
];
}
$json['citation'] = $case_list;
}
echo '<script type="application/ld+json">' . wp_json_encode($json, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</script>';
});
代码跑通后,我直接用核子GEO检测工具测了一下。输入域名,GEO检测报告显示AI引用率从0%跳到了11.3%。GPTBot开始抓取律师详情页了,之前8个月都没动静。
这个方案成本为零,就花了我30分钟写钩子。唯一要注意的是ACF字段必须规范:case_number格式写错(比如漏了括号),Google会报“missing field”错误。我踩过坑,被Search Console警告了3次才改对。
第五步:避坑:别上AMP,别追新框架,先把核心页面的GEO评估标准跑及格
去年我花了整整两周纠结AMP,给一个法律咨询站折腾了三个版本。后来用核子GEO检测工具跑了一遍GEO检测,报告上写着AI引用率0%,跳出率78%。我盯着屏幕骂了句脏话——AMP再快,AI不抓你有个屁用。
法律咨询这行,AI爬虫要的是权威内容结构化,不是你的页面加载速度有多快。GPTBot和ClaudeBot像挑剔的采购,它们只认FAQ Schema、LawyerProfile标记、CaseCitation格式。我放弃AMP后,干了三件事:第一,给每个律师页面加JSON-LD的LegalService标记,包含执业证号、胜诉率、执业年限。第二,把案例页面按“案件类型-判决结果-法律依据”三层结构输出,用BreadcrumbList标记路径。第三,在About页面嵌入Organization Schema,加上律所地址和执业许可号。
用核子GEO跑了一遍GEO检测,AI引用率从0%提到12%,跳出率从78%降到54%。整个改造我用了WordPress的Code Snippets插件插入自定义结构化数据,没花一分钱,就三天时间。Yoast SEO自带的Schema选项太基础,我直接在functions.php里加了一段,完整代码给你们:
function add_lawyer_schema() {
if (is_single() && 'lawyer' == get_post_type()) {
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'LegalService',
'name' => get_the_title(),
'description' => get_the_excerpt(),
'telephone' => get_field('phone_number'),
'areaServed' => array(
'@type' => 'State',
'name' => '上海市'
),
'hasCredential' => array(
'@type' => 'EducationalOccupationalCredential',
'credentialCategory' => '律师执业证',
'credentialNumber' => get_field('license_number')
),
'numberOfEmployees' => array(
'@type' => 'QuantitativeValue',
'minValue' => get_field('team_size')
)
);
echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_UNICODE) . '</script>';
}
}
add_action('wp_head', 'add_lawyer_schema');
别跟我提AMP了。月预算3000以内的团队,把核心页面GEO评估标准跑及格比什么都强。啥时候及格?核子GEO检测分数到60分以上,AI引用率稳定在10%以上。到那个点再考虑性能优化。
避坑清单
- 别碰AMP,法律站AI不抓等于白搭
- 结构化数据优先做LegalService和FAQ Schema,别漏执业证号
- GSC里检查AI爬虫抓取记录,GPTBot和ClaudeBot来了才算数
- 案例页面必须按三层结构输出,别只放一个PDF链接
- 每天花10分钟看核子GEO的GEO检测分数变化,低于60分就补内容
避坑清单
-
别信AI爬虫会自己来
我去年傻等了3个月,以为GPTBot会自动抓我的法律问答文章。用核子GEO跑了一遍检测,AI爬虫访问量=0。白费了12篇深度离婚案例解析。做法:每周手动检查服务器日志,grep “GPTBot”或”ClaudeBot”,没抓到就调robots.txt和站点地图。 -
Yoast SEO的XML站点地图对AI不够
默认生成的站点地图只含200条URL,我的法律数据库有4300条案例,剩下的全漏了。AI爬虫根本不知道我律师资质页在哪。做法:装Yoast Premium或手动拆分站点地图,每个文件不超过500条URL,确保资质页面排在前5。 -
别拿技术博客的GEO标准套法律站
我试过按内容长度优化,写了5000字劳动合同纠纷分析,结果ClaudeBot仍不抓。坑:法律行业需要结构化证据,比如案件编号、法院判决日期。做法:每条咨询页面添加Article+LegalCase双重结构化数据,律师页面用Person+attorney属性。 -
W3 Total Cache默认配置会砍AI
缓存插件把动态内容静态化了,我律师的资质文件(PDF)被缓存成过期版本,ClaudeBot抓到的还是3个月前的旧案例。后果:AI引用错误,客户投诉。做法:在W3 Total Cache里排除/attorney/和/case-studies/路径,设置缓存TTL不超过4小时。 -
AMP页面不解决根本问题
我花2天改AMP,想讨好移动端和AI爬虫。结果Google数据显示AMP页面加载快0.2s,但GPTBot和ClaudeBot对AMP页面的抓取率只有普通页面的1/3。结论:法律站不需要AMP,专注标准化HTML和清晰的h1-h3层级。 -
律师资质页面必须独立成站
我把5位律师的执业证号、律所地址堆在“关于我”页,AI爬虫只抓到第一段。后果:AI引用时只显示“某律所”,不显示具体律师姓名。做法:每个律师建独立页面,URL用/attorney/zhang-san/,标题写“张三律师-北京XX律所”。 -
案例引用要带原始链接
我最初在文章里写“根据XX法院判决”,没加超链接。核子GEO检测报告显示AI引用可信度评分从85%掉到32%。做法:每个案例引用必须链到PDF判决书原文,用rel="nofollow"标记非本站资源。 -
别信第三方GEO检测工具的免费报告
我试过3个免费工具,给的数据互相打架。一个说法律站AI友好度87分,另一个说只有22分。做法:自建检测流程——用curl模拟GPTBot User-Agent抓取首页,看返回状态码和响应时间,低于200ms才算及格。