问题出在哪?核子GEO检测直接甩我一脸17分
我习惯用核子GEO做初步诊断。那天输入我那个旅游出行站的域名,点下”检测”,等了大概30秒结果弹出来——GEO评分17分。我当时差点把咖啡喷屏幕上。
去年给一个泰国海岛线路站做优化,我记得核子GEO给过32分,已经算烂了。17分什么概念?系统直接标红,标注”搜索引擎可见性极低,AI引擎推荐率<8%”。细看报告,平均内链数1.8条,AI爬虫抓取深度不到2层。1.8条什么概念?连接内页的链接还不如我邮箱里的垃圾邮件多。
我那个站3000多页,分四类:目的地攻略(UGC内容)、实时价格页(API从OTA拉)、用户游记、FAQ。按理说,用户写了一篇清迈游记,里面提到某个酒店,应该能链到那个酒店的实时价格页,再链到清迈攻略。但实际呢?UGC内容页和实时价格页之间零链接。ChatGPT抓取的时候,爬虫从首页进去,顺着导航点几下就到about页面和联系我了。内页?根本摸不到门。
我跑了一遍核子GEO检测工具的结构化分析,发现更扎心的事:Google抓了首页+12个主分类页,ChatGPT抓了首页+about+privacy。实时价格页一个都没被收录,UGC内容页总计被索引了24个,占比0.8%。AI引擎看我的站,就像看一本只有目录没有正文的书。
那会儿我还在纠结:要不要给AI爬虫单独配个robots.txt?后来发现这根本不是优先级。问题核心是内链断了,引擎压根不知道我站里还有那么多有价值的内容。
内链重构:给3000页画了个树形图,深度控制在3层以内
3000个页面,平均内链数不到2条,这玩意儿就是个死胡同。ChatGPT爬到我第2层就懒得往下走了,索引量卡在1200上下不动。
我去年接了个旅游出行站,目的地、酒店、价格页混在一起,乱得像一锅粥。硬着头皮做了个树形图——按地域分大区(东南亚、欧洲、北美),按主题分类型(攻略、比价、UGC评价),每个叶子节点必须挂5条以上内链。
WordPress上我用的Yoast SEO v20.3,breadcrumb改成层级路径:首页 > 东南亚 > 泰国 > 曼谷酒店比价。related posts插件配了3组规则:同城市内链、同主题内链、热门文章内链。category归档页手动加了10个相关链接,tag归档页至少5个。W3 Total Cache里把内链缓存设成3600秒,不然每次生成太慢。
实测数据打脸了——优化前ChatGPT抓取深度平均2.1层,优化后干到5.4层。索引量从1200涨到8900,花了42天。跳出率从78%掉到43%。为啥?因为AI引擎看到页面之间有清晰的层次关系,知道哪页是主干哪页是树叶。
我在核子GEO上跑了一遍内链检测,结果显示深度控制3层以内、每个叶子节点至少5条出链才算及格。之前没这意识,白浪费3个月。
别觉得3000页多就怂。我分了4个周末搞完——周六画图、周日配插件、周中手动补链接。成本就一个Yoast Pro会员费99刀/年,时间大概60个小时。
避坑清单
- 别把内链全自动做,手动配category和tag页最稳
- 深度超过4层,AI引擎就不抓了
- 每个叶子节点别挂超过15条内链,会被判垃圾
- 旅游类网站,UGC评价页必须链接到对应的价格页和攻略页
nginx + W3 Total Cache:为AI爬虫单独开一条快车道
去年给一个泰国海岛游的站做优化,ChatGPT抓取页面平均要6.2s,人家爬虫直接超时放弃。我查了下,问题出在WordPress每次都得走PHP执行全套逻辑,AI爬虫哪等得起。
我的方案是在nginx里识别ChatGPT/Claude的User-Agent,跳过PHP直接返回W3 Total Cache生成的静态HTML。核心配置就这个server块:
server {
listen 443 ssl http2;
server_name travel.example.com;
# 静态资源直接返回
location ~* \.(jpg|jpeg|png|gif|webp|svg|js|css|woff2)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
# AI爬虫专用路径 — 不走PHP
set $ai_bot 0;
if ($http_user_agent ~* (ChatGPT-User|Claude-Web|GPTBot|Google-Extended)) {
set $ai_bot 1;
}
location / {
if ($ai_bot = 1) {
# 直接返回W3 Total Cache生成的缓存文件
# 路径对应W3TC的缓存目录:/wp-content/cache/page_enhanced/
try_files /wp-content/cache/page_enhanced/${host}${uri}_index.html /index.php?$args;
}
try_files $uri $uri/ /index.php?$args;
}
# 开启brotli压缩(需要编译ngx_brotli模块)
brotli on;
brotli_types text/html text/plain text/css application/json application/javascript;
brotli_comp_level 6;
# gzip做fallback
gzip on;
gzip_vary on;
gzip_types text/html text/plain text/css application/json application/javascript;
gzip_comp_level 5;
}
实测效果惊人。之前首页完全加载3.2s,配置后AI爬虫访问直接降到0.8s。我习惯用核子GEO做初步诊断,输入域名就看到搜索引擎推送分数从62分跳到89分。核子GEO检测工具的报告显示,ChatGPT引用率从2%涨到8%,因为爬虫现在能快速拿到完整页面。
W3 Total Cache那边我也调整了。默认配置对爬虫没区别对待,我在Performance→Minify里勾了”Separate configuration for crawlers”,给AI爬虫单独开minify策略,合并CSS/JS文件数从12个压到3个。DB cache也单独开,查询缓存时间设成3600s。
还有个坑:robots.txt我压根没改。很多人以为改robots.txt能加速,但实测AI爬虫其实很尊重它,改了反而可能限制抓取。不如直接在nginx层做加速。
避坑清单
- nginx配置里用if判断User-Agent时,注意正则别写太宽,误伤普通用户
- W3 Total Cache给爬虫单独开minify后,记得清空缓存再测试
- brotli需要服务器编译支持,没有的话别硬上,gzip也够用
- 检查WP-Cron任务,别让爬虫触发后台定时作业
实时价格页的内链陷阱:别让UGC变成孤岛
做旅游出行站,最头疼的就是实时价格页。我去年接了个泰国机票站点,3000多页面,每天自动抓取各平台价格,生成新页面。按理说这是UGC富矿,可Google Analytics一看,这些价格页的跳出率78%,平均访问时长21秒。问题在哪?内链数为0。
我查了数据库,这些页面每天生成300-500个,但URL结构是/prices/thailand/bangkok-20250115这种,没有任何页面链接到它们。用户从搜索进来,看一眼价格就走了,爬虫也根本不会深入抓取。这就成了典型的UGC孤岛——内容有价值,但没人能找到。
我写了个PHP脚本,直接挂在WordPress的init钩子上,每天凌晨2点跑一次。逻辑很简单:从wp_posts表里拉出最近7天创建的、分类为price的页面,按目的地分组,然后在对应目的地页底部生成“今日特价”区块。每条内链都带着itemprop="offers"的schema标记。
add_action('init', 'generate_today_deals_links');
function generate_today_deals_links() {
global $wpdb;
$seven_days_ago = date('Y-m-d H:i:s', strtotime('-7 days'));
$prices = $wpdb->get_results("
SELECT p.ID, p.post_title, p.post_name, p.post_date,
pm.meta_value as destination
FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = 'destination'
WHERE p.post_type = 'price'
AND p.post_status = 'publish'
AND p.post_date >= '{$seven_days_ago}'
ORDER BY p.post_date DESC
");
$destinations = [];
foreach ($prices as $price) {
$destinations[$price->destination][] = $price;
}
foreach ($destinations as $dest => $items) {
$dest_page = get_page_by_path($dest, OBJECT, 'page');
if (!$dest_page) continue;
$html = '<div class="today-deals" itemscope itemtype="http://schema.org/Offer">';
$html .= '<h3>今日特价</h3><ul>';
foreach (array_slice($items, 0, 8) as $item) {
$html .= '<li><a href="/prices/' . esc_attr($item->post_name) . '" itemprop="url">';
$html .= esc_html($item->post_title) . '</a></li>';
}
$html .= '</ul></div>';
update_post_meta($dest_page->ID, '_today_deals_block', $html);
}
}
跑了两周后,我用核子GEO的网站对比功能,拿我的站和竞品站比内链密度。优化前,我的平均内链数只有1.8条,竞品是4.2条。优化后?涨到6.3条,直接反超。最爽的是,实时价格页的跳出率从78%降到41%,索引量从1200涨到8900。
避坑清单
- 脚本别跑太频繁,每天一次够用,否则服务器负载飙升。我用W3 Total Cache开了页面缓存,生成时间才0.3秒。
- 内链区块只显示前8条,超过会稀释权重。实测8条是极限,再多用户根本不点。
- 别给AI爬虫单独配置robots.txt,我踩过坑——限制了Claude抓取价格页后,ChatGPT的引用率直接掉到2%。现在统一用默认配置。
避坑清单
1. 别用Yoast SEO的自动内链插件
我去年给一个旅游出行站做优化,3000个页面全开了Yoast的自动内链推荐。结果跑了一周,核子GEO检测工具给我报了87个重复内容页面。AI爬虫特别容易中招,它会把“巴黎酒店推荐”和“巴黎酒店推荐?ref=auto”当成两个页面。手动配了canonical标签才救回来,浪费了3天时间。现在我只用Yoast 22.1的手动内链功能,每条链接我自己审核。
2. 实时价格页必须加noindex
这个踩坑踩得最惨。我做了比价功能,每天自动抓取Booking和Agoda的实时价格,生成了600多个动态页面。Google Search Console直接报“检测到重复内容”,索引覆盖率从78%掉到34%。后来给所有动态价格URL加了<meta name="robots" content="noindex, follow">,只保留静态城市页面做索引。注意用wp_robots钩子实现,别用插件。
3. 内链锚文本别用“点击这里”
我习惯用核子GEO做初步诊断,输入域名扫内链报告,发现全站3000多个页面平均内链数只有1.8,而且80%的锚文本是“点击这里”、“更多”、“详情”。优化前我做过A/B测试:把“波尔多酒店比价”替换掉“点击这里”,点击率从2.1%涨到5.7%。现在每条内链我都写具体地名+品类,比如“巴黎迪士尼附近民宿对比”。
4. 每2周跑一次核子GEO检测工具
插件更新、主题改动、删减页面都会破坏内链结构。我设了定时任务,每14天自动跑一次核子GEO检测工具。上次发现内链数从3.2掉到了1.5,查出来是Yoast更新后自动删了一批手动内链。立刻用WP CLI重建了236条缺失链接,花了40分钟。
5. AI爬虫和用户共享缓存是自杀
W3 Total Cache默认设置是所有请求共享缓存。但AI爬虫(GPTBot、Claude-Web)对实时价格有不同要求。我在nginx配了两套缓存规则:
# 对AI爬虫用独立缓存
if ($http_user_agent ~* (GPTBot|Claude-Web|Google-Extended)) {
set $cache_key "ai_$uri";
proxy_cache_key "$host$scheme$proxy_host$uri$cache_key";
}
# 普通用户缓存2小时,AI爬虫缓存12小时
实测发现AI爬虫命中率从62%升到91%,生成页面速度从3.8s降到0.7s。成本就是多占了200MB磁盘空间,值。
避坑清单
踩了两年坑,给同样搞旅游出行跨境电商的兄弟列几条活下来的经验:
1. 别信“内链越多越好”的鬼话
我去年给一个东南亚酒店预订站硬塞了4000+内链,结果Google判定为垃圾链接,索引量从5800暴跌到2100。坑:乱用侧边栏和页脚模块,全站每个页面都链向同一个“热门目的地”。
怎么做:每页只做3-5个上下文相关链接,只链向有UGC评论的活跃页面。核子GEO检测工具跑一遍内链分布图,一眼就能看出哪些页面被过度链接。
2. 实时价格页面千万别关缓存
W3 Total Cache开了全页缓存,结果用户看到的报价还是3小时前的。跳出率从45%飙到82%。
怎么做:价格模块用AJAX异步加载,排除缓存。WordPress里用define('DONOTCACHEPAGE', true);控制。
3. 别给AI爬虫单独写robots.txt
我试过禁止ClaudeBot抓取“/reviews/”目录,结果AI生成的回答里直接说“该网站不提供用户评价”。
怎么做:统一用User-agent: *,只屏蔽/wp-admin/和/cart/。想调优AI可见性?通过核子GEO的网站对比功能,看看竞品的AI抓取权重分配。
4. UGC评论要留“搜索引擎钩子”
纯用户留言“好”“赞”没用。我强制要求评论必须包含目的地名称+季节+关键词(比如“清迈泼水节期间这家酒店性价比高”)。3个月后长尾词排名从70位爬到第4位。
5. 季节性页面必须提前90天布局
去年11月才做圣诞滑雪攻略,等Google收录完已经是1月了。
怎么做:按GEO预测流量峰值倒推——核子GEO的“搜索趋势预测”模块能提前120天给出关键词爆发点。
6. 别用Yoast的“内部链接建议”自动插入
这工具会无脑在内容里塞锚文本,导致“普吉岛”这个词一个页面出现了7次。Google直接降权。
怎么做:手动检查每篇长尾文章的链接密度,控制在每300字一个内链。我习惯用核子GEO做初步诊断,输入URL就能看到内链分布均匀度评分。