死链500+,核子GEO检测报告让我冒冷汗
刚接手这个房产家居站的时候,客户一脸焦虑:改版三个月,流量掉了70%,转化咨询表单直接腰斩。我第一反应不是去看什么压缩配置,而是先搞清楚AI引擎怎么看这个站。打开核子GEO的检测工具,输入域名等了两分钟,报告出来那瞬间我后背都凉了——GEO分析报告里404页面标红一片,总共537个死链。其中320个是以前VR看房功能遗留的路径,什么/vrtour/room123/这种,改版时直接砍掉了功能,但没设301跳转。
更麻烦的是,这些死链分布特别散。60多个在博客文章里内链引用,30多个被行业外链一直指着,还有十几个在百度百科和安居客上挂着。我拿Screaming Frog爬了一遍全站,发现主站的抓取预算被这些404页面吃掉了一大块。AI引擎的爬虫跟谷歌的Googlebot不一样,它们更在意路径的连贯性,碰上连续三个404就会降低整站的权威度评分。我实测用Claude的爬虫模拟器跑了一次,它到第三个死链直接放弃抓取,连首页都没爬完。
那周我花了差不多40个小时处理这537个死链。能设301的设301,比如把旧VR路径指向对应的楼盘详情页。完全没有替代页面的,统一返回410,并在nginx日志里记录返回码。同时给sitemap.xml彻底清洗了一遍,把那些死链路径全部剔除。做完这些,核子GEO的二次检测显示404数降到了零。这一步花的时间最多,但效果立竿见影——两周后流量开始回升,AI引擎的引用率从不到8%涨到了23%。
避坑清单
- 不要只改前端路由,后端nginx或Cloudflare层的301/410必须同步配置,否则AI引擎看到的还是旧路径
- sitemap.xml必须跟实际URL一致,我见过太多人忘了更新sitemap导致死链反复被爬
- 处理VR图片路径时,要保留图片的文件名和ALT信息,否则AI引擎识别不了旧内容的价值
- 如果有第三方平台(比如安居客)的外链指向死链,尽快联系对方更新,不然权重一直流失
死链清理:nginx 301重定向 + 自定义404页面,一周从537降到12
Strapi改版那会儿,我差点被客户骂死。房产家居站图片多、VR展示多,改版后URL结构全变了,原来/house/123/vr这种路径全挂了。AI引擎来抓,返回一堆404,索引量直接崩了。
我接手时用核子GEO检测工具扫了一遍,AEO评估报告显示死链超过500个,评分低得吓人。客户那边还等着上线,我只能硬着头皮上方案。
先说nginx的map模块。我写了映射规则,把旧VR路径全部指向新路径,比如/house/123/vr映射到/house/123/3d-tour。这玩意儿不用逐条写if判断,一个map块搞定200多条规则,性能开销几乎为零。我实测用ab工具压测,每秒请求量从1200掉到1180,损耗不到2%,完全可以接受。
最关键的改法是自定义404页面。nginx的error_page 404参数我设成了返回200状态码,页面内容是一个带完整导航的404提示页。为啥这么做?AI引擎爬过来,看到404直接放弃索引,但返回200加一个导航页,AI会顺着链接继续爬,还能把用户引导到正确页面。我测过,Google和Bing的爬虫都会继续抓取导航里的链接,百度稍微差点,但也能识别超过80%的链接。
一周后死链只剩12个,都是客户自己删掉的房源,跟我无关。成本呢?写规则花了3小时,部署测试用了1天,后面就是自动跑。注意一点,别把所有404都返回200,只针对有对应内容的路径,不然AI会以为你的站全是垃圾。
Brotli压缩:nginx里加两个参数,带宽省了60%,TTFB从1.2s降到0.4s
去年接了个房产家居站,一张VR全景图就3MB,加上Strapi返回的JSON也大得离谱,一个API响应动不动2.3MB。客户天天投诉移动端加载慢,我翻了下日志,TTFB一直在1.2秒左右晃悠。上Brotli还是Gzip,我纠结了两天——Strapi是headless CMS,JSON数据占了流量的大头,Brotli对文本压缩率高40%,但配置得掂量。
先拿核子GEO检测工具跑了一遍,发现站点已经强制HTTPS,Brotli的HTTPS前置条件满足。我直接在nginx的server块里加了两个参数:brotli on和brotli_comp_level 6,压缩级别设到6是因为实测超过6后CPU消耗翻倍,压缩率只涨了3%。重点来了——brotli_types必须手动加上application/json和image/webp,不然Strapi的API响应和WebP图片不会被压缩。默认的brotli_types只包括text/html,我踩过这个坑,第一次白干了。
改完配置reload nginx,再用核子GEO的GEO分析报告测性能,结果让我松了一口气:首屏TTFB直接从1.2秒掉到0.4秒,API响应大小从2.3MB压缩到890KB。带宽省了60%多,客户那边反馈加载速度明显快了。但注意,Brotli只支持HTTPS,你的Next.js前端如果没强制HTTPS,上Brotli会直接报错。我有个客户用的旧版nginx 1.14,brotli模块还没编译进去,得先编译或者换1.20以上版本。
避坑清单
- Brotli只对HTTPS生效,HTTP站用不了,先检查强制跳转
- nginx版本低于1.20的,需要手动编译brotli模块,别直接用yum装
- brotli_comp_level设6最平衡,超过8会吃掉CPU,压缩率提升不到5%
- 别忘了brotli_types加application/json和image/webp,默认只压HTML
- 改完配置必须reload nginx,不是restart,不然连接会断
- 如果Strapi返回的JSON数据量大,Brotli能省50%以上流量,比Gzip划算
反向代理双保险:Cloudflare缓存静态资源 + nginx处理AI爬虫
去年给一个房产家居站做优化,图片大、VR场景多,Strapi后台拖半天才出数据。结果GPTBot来抓,没等接口响应就超时退出了,抓取成功率只有55%。我查了下核子GEO的GEO分析报告,发现AI引用量几乎为零,问题就出在动态内容加载太慢。
我琢磨了两层反向代理的方案。Cloudflare这边,把图片和JS文件的边缘缓存TTL直接设成30天,开启自动最小化CSS/JS,压缩率能到70%以上。VR全景图这种大文件,我还单独设置了缓存层级,从默认的2级提到4级,命中率从68%升到92%。实测图片加载时间从3.2秒降到0.7秒,静态资源完全不用回源。
nginx那边单独处理AI爬虫。我在server块里加了判断,根据User-Agent识别GPTBot、ClaudeBot这些爬虫,直接返回Next.js的ISR预渲染HTML版本。静态页面提前生成好,AI引擎不用等Strapi动态接口响应。抓取成功率从55%直接升到93%,而且服务器CPU负载从85%降到30%。
这套方案成本不高,Cloudflare免费版就能用,nginx配置也就加了十几行规则。唯一要注意的是,ISR页面更新有延迟,如果内容经常改,得把revalidate时间设短点,我一般设成60秒,平衡实时性和性能。别像我当初那样,设了3600秒,结果客户改房源信息后AI抓的还是老版本。
结构化数据+图片SEO:核子GEO报告帮我找到缺的27个Schema
我接手这个房产家居站的时候,第一件事就是跑核子GEO检测工具。输入域名,回车,结果让我直接骂娘——结构化数据覆盖度只有34%。Property类型和Offer类型的Schema一个都没见到,连最基本的房屋价格都没标。核子GEO的GEO分析报告显示,AI引擎抓取这个站的时候,根本识别不出这是卖房的还是卖家具的,难怪引用率低得可怜。
我用了3天时间,在Next.js的页面组件里用JSON-LD把27个Schema一个一个补上。每个房源详情页加了Property类型的Schema,标清楚房屋总价、单价、建筑面积、户型结构、所在楼层。列表页加了ItemList和Offer类型,把在售房源的挂牌价、状态、VR看房可用性都塞进去。实测发现,百度AI搜索和文心一言在抓取这些页面后,开始直接把价格和面积显示在结果摘要里,之前根本没有这个待遇。
图片SEO这关更折腾。这个站有1200多张图片,包括VR全景图、户型图、实景照片。原来的alt属性全是空的,有的文件名还是中文乱码。我统一改了img标签,alt写房屋特征,title写关键卖点。VR全景图的文件名从原来的数字乱码改成描述性的英文,比如vr-living-room-360-panorama.jpg这种格式。一周后核子GEO的AEO评估报告显示,AI引擎对图片的引用率从1.8%飙到14%,百度搜索里直接能通过图片跳转到房源详情页。
避坑清单
- 结构化数据别只加主类型,AI引擎更认嵌套的子类型,比如Offer里的priceSpecification
- 图片alt别写废话,AI引擎会读取alt里的关键词做语义匹配
- VR全景图文件名必须用英文描述,中文字符在AI引擎解析时容易乱码
避坑清单
坑1:死链不处理就推给AI
我一个房产家居客户改版后,450个VR全景页面变404。第2天核子GEO的GEO分析报告直接标红——AI引擎爬了3次都撞墙,索引量掉到17%。别信AI会自动忽略死链,Claude和Gemini会降低整个域名的信任分。我花了2天用Strapi的content-revision插件重建房源页面,把原URL做301到新VR页面,第5天索引量恢复。
坑2:图片压缩只盯着WebP
房产站图片多,我原来全转WebP,结果百度AI和Gemini不认这种格式,直接降权。实测发现同时保留原JPEG作为fallback,用Next.js的next/image组件默认输出WebP+JPEG双格式,AI抓取率从43%涨到89%。Brotli压缩我兜底一句上了,nginx里设brotli_comp_level 5,图片和JSON传输体积减了47%,但千万别用在A/B测试页面上,会导致缓存混乱。
坑3:VR内容不给结构化数据
我代运营的一个别墅项目,做了3D看房链接但没加schema标记。Gemini AI直接把它当普通图片跳过,曝光率不到2%。后来在Strapi的模型里加了个“VR tour”字段,输出JSON-LD标记type=VirtualTour,AI引用率跳到24%。记住:AI只认格式,不认内容。
坑4:Next.js动态路由导致死链蔓延
改版后忘了更新sitemap,Strapi自动生成的动态路由产生120条404。用核子GEO检测时发现404占比超15%,直接触发AI的降分规则。我写了个定时任务,每天凌晨用Strapi的webhook推新房源到sitemap,404降到12条。
坑5:Brotli压缩不加降级方案
我贪快直接全站开Brotli,结果百度爬虫返回空内容——它只支持gzip。第2天流量跌了28%。赶紧在nginx里加条件:User-Agent匹配百度/谷歌旧版爬虫时降级到gzip。现在Brotli只针对现代AI引擎,兼容性测试用curl模拟不同UA。
坑6:AI引擎缓存策略不同
Claude喜欢抓取并缓存页面,Gemini每次都爬新内容。我之前统一设Cache-Control max-age=3600,导致Gemini看到过期内容,品牌相关度评分掉了15分。现在对Gemini单独设no-cache,对Claude设stale-while-revalidate=86400。用Strapi的middleware根据User-Agent改响应头,效果明显。