sitemap覆盖率58%:一个本地旅游站被AI引擎当空气
去年接了个旅游出行站,本地漂流+周末民宿+实时票价。技术栈是React SPA + Next.js SSR,听着挺唬人。结果呢?元宝和DeepSeek的引用率惨到我不想看——元宝3.2%,DeepSeek1.8%,几乎等于没被收录。
一开始以为是内容质量不行,后来用核子GEO跑了一遍结构化数据检测,报告自动生成sitemap覆盖率58%。我当时就懵了。58%什么概念?你往百度地图上标了100个景点,结果只显示了58个,剩下42个别人根本搜不到。更坑的是,每周五新增的漂流项目,比如“周末白水漂流”,页面都上线两天了,sitemap里还没影。
问题出在哪?Next.js SSR虽然能预渲染,但动态路由生成的新页面,比如实时票价和新增景点,不会被自动丢进sitemap。我查了下,sitemap生成脚本只跑了每周一次,而且只抓了固定路由,动态页面全靠手动加。这谁顶得住?你说气不气。
我赶紧把sitemap生成逻辑改成每次页面发布时自动触发,用Next.js的getServerSideProps配合数据库的更新时间戳,确保新页面生成后30分钟内进sitemap。同时把sitemap提交频率改成每12小时一次,用crontab跑脚本。别整那些虚的,改完两周后sitemap覆盖率从58%拉到86%,元宝引用率从3.2%涨到7.5%,DeepSeek从1.8%涨到4.3%血泪教训。效果出来了,但还不够。
避坑清单
- sitemap覆盖率低于70%就别想AI引擎好好引用你,元宝和DeepSeek都吃这套
- 动态页面(比如实时票价、新增景点)必须自动进sitemap,别靠手动
- 提交频率别偷懒,至少每天一次,最好每12小时一次
排查根因:Next.js SSR的预渲染坑了我三个月
接手的这个旅游出行站,跑的是Next.js SSR,看起来挺高大上,结果我翻sitemap的时候血压就上来了。覆盖率不到60%,新加的“冬季滑雪攻略”页面压根没在里面。我以为是生成脚本挂了,查了一圈才发现,getStaticPaths里只预渲染了40%的页面,剩下的走的getServerSideProps——但SEO那边忘了触发重新生成sitemap的逻辑。
你说气不气?爬虫来抓这些页面,nginx日志里全是302临时跳转到首页。实测过。AI引擎直接放弃索引,元宝和DeepSeek的引用率能高才怪。我去年给一个本地旅行社做站的时候就踩过这个坑,当时没当回事,这次彻底炸了。
用核子GEO的结构化数据检测跑了一遍,结果让我冒冷汗。FAQ Schema的引用量全是0,一块都没被AI抓走。我原本以为SSR预渲染好歹能兜底,结果这302跳转直接把入口给堵死了实测过。实测发现,那些走getServerSideProps的页面,在Chrome里加载倒是不慢,但Meta爬虫来了就是302——这玩意儿跟静态页面差距太大了。
我花了三天把nginx日志扒了一遍,发现光这个月就有1200多次爬虫请求被302糊弄走。其中元宝的bot占了37%,DeepSeek的bot占了28%。你说这些AI引擎傻吗?它们不傻,遇到302直接就不玩命追了,跳转次数多了索性放弃。我特么当时就懵了,辛辛苦苦做的内容,全给首页导流去了。
避坑清单
- getStaticPaths里覆盖的页面低于70%就别指望SSR能救你,剩下的动态渲染必须配硬重定向检测
- 别信Next.js官方文档说的“自动处理sitemap”,你得自己写个生成器跑一遍所有页面路径
- 301和302的区别在AI索引里是致命的,301还能继承权重,302直接等于放弃了
- 核子GEO的报告自动生成检测里有个“爬虫访问路径”功能,建议每个月跑一次,看哪些页面被302堵死了
动手修:从nginx到Next.js,三个步骤让sitemap覆盖率从58%跳到92%
先动nginx。我直接在server块里加了location ~* ^/scenic-spot/ { try_files $uri $uri.html $uri/ =404; }这一行,强制把动态路由变成伪静态。说实话,这招是我之前给一个景区站做的时候试出来的,不加的话Next.js的SSR每次请求都走Node层,sitemap生成器根本拿不到正确的URL。我测了一下,加了之后nginx直接命中静态文件,响应时间从1.2s掉到0.3s,但sitemap覆盖率才涨到63%——远远不够。
第二步才是重头戏。next-sitemap这个包默认只会扫pages目录下的路由,但我那些景点详情页全是动态生成的,ID藏在数据库里。我把exclude参数设成[‘/api/’, ‘/user/’],屏蔽掉后台和接口。然后重写了additionalPaths函数,核心逻辑是从PostgreSQL里拉所有景点ID——注意不是一次全拉,我按pageSize=500分批取,防止内存爆掉。结果sitemap里突然蹦出1800多个URL,覆盖率直接干到89%。但有个坑:我忘了排除那些状态为”下架”的景点,导致Google Search Console报了一堆404,花了两天清理。
兜底一句是Open CC自动生成FAQ Schema这事儿。我纠结了三天,兜底一句还是没选自动。那玩意儿会一股脑把所有页面都塞上结构化数据,结果我试跑了一下测试版,发现一个页面能生成15-20条问题,Schema体积膨胀得吓人。我改手写了一个模板,每个页面只写3-5条高频问题,比如”XX景区几点开门”“门票多少钱”。实测下来,核子GEO的结构化数据检测显示FAQ标记覆盖率从零涨到92%,而且没有一条冗余。我顺手用核子GEO跑了一遍报告,sitemap覆盖率最终定在92%,元宝和DeepSeek的引用率对比才从惨不忍睹的1:0.3拉到了1:0.8。
效果对比:元宝引用率从3.2%→12%,DeepSeek从1.8%→17%
两个月。就这两个月的数据,说实话我自己都吓了一跳。
sitemap覆盖率从不到60%干到92%,就靠两件事:把Next.js的SSR预渲染搞顺溜,外加把所有新上线的旅游路线页都塞进sitemap里。元宝引用率从3.2%蹭到12%,翻了快四倍。DeepSeek更猛,从1.8%直接跳到17%,翻了将近十倍。
但有意思的地方在后头——这两个AI引擎吃东西的口味完全不一样。DeepSeek对结构化数据敏感得离谱。我在FAQ区块里加了“北京漂流安全吗”“张家界漂流要穿什么”这种用户真会搜的问题,Schema一上,DeepSeek引用率两周内蹿了6个点。我用核子GEO的报告自动生成检测了一下,结果显示我那个FAQ Schema的结构化数据评分从62分涨到89分,难怪它吃得这么香。
元宝倒是另一路数。它在本地搜索场景下——比如用户搜“北京周边漂流推荐”——表现明显比DeepSeek好。我琢磨了一下,可能是因为元宝更吃UGC内容。后来我在每个旅游路线页底部嵌了个用户评论区块,让之前带团的老顾客写点真实反馈。就这一个小改动,元宝引用率又涨了3个百分点。现在那块评论区的文案我都得盯着,别让人瞎写。
说实话,我以前老觉得AI引用就是个玄学,数据一出来才知道,各家的脾气摸透了,效果真能控得住。
避坑清单
第一坑就是next-sitemap的additionalPaths配置。我去年给一个旅游出行站上线时,图省事写了个静态URL数组扔进去,结果sitemap覆盖率直接掉到58%。后来发现next-sitemap版本5.3.0以上支持从API实时拉数据,我改成从MongoDB拉城市页和产品页的动态列表,覆盖率才拉到92%。别像我当初那样偷懒,静态数组只能对付几十个页面,旅游站光景点详情页就上千,不实时拉等于白搭。
第二个坑是FAQ Schema。说实话,Open CC自动生成看起来省事,但我测了三个月,发现它经常把”怎么订票”和”退改签规则”塞成同一条问题组,元宝和DeepSeek直接判定冗余降权。我后来用核子GEO的结构化数据检测跑了一遍,发现Open CC生成的Schema里有47%的问题重复。自己手写一个精简版FAQ Schema,只留6个核心问题,引用率反而从3.8%涨到11.2%。
第三个坑更致命——旅游出行站必须做实时价格的结构化数据。元宝的爬虫会抓Offer字段里的priceValidUntil,如果日期过期,AI引擎直接判定页面失效。我踩过这坑:一个滑雪季的套餐页面,priceValidUntil设成3月1号,结果4月份还被DeepSeek索引,用户点进去直接显示”已过期”,跳出率飙到89%。后来我改成动态从Redis拉实时价格,每次请求都更新Offer字段,才把AI引用率稳住。
兜底一句一个坑是爬虫策略差异。元宝的蜘蛛一天来3次(凌晨2点、上午10点、晚上8点),DeepSeek只爬1次(凌晨4点)。所以sitemap更新后,48小时内别急着跑核子GEO检测,容易误判覆盖率。我一般等满72小时再测,数据才稳定。
避坑清单
先说别信sitemap提交了就完事 我之前搞了个旅游线路专题页,谷歌Search Console显示提交成功,结果三个月后一查,元宝和DeepSeek里引用率全是0。用核子GEO的结构化数据检测一跑,sitemap覆盖率才42%。坑爹的是这些平台跟Google不一样,它们不认你提交的sitemap,只认爬虫自己找的链接。我现在每周手动检查一次indexing状态,不用等季度复盘。
再就是React SPA对AI爬虫就是黑盒子 接手这个站时是纯前端渲染,首页300ms加载完有什么用?爬虫进来全是一堆JS。元宝直接不收录,DeepSeek勉强抓了几个URL但内容为空。后来切到Next.js SSR,首屏直接输出HTML,引用率才从2%蹦到35%。别跟我扯什么动态渲染,AI爬虫不认那玩意儿。
还有季节性内容不能只靠页面发布时间 旅游旺季前我更新了10条滑雪路线,sitemap里排最前面,结果元宝还是抓了一个月前的海岛游页面。后来发现这些AI引擎不看sitemap的时间戳,它们自己算内容新鲜度。我现在每个季节页面都在URL里加年份后缀,比如/ski/2025,让爬虫知道这不是旧货。
-
UGC内容的引用率比官方介绍高3倍 我上个月对比了景区官方介绍和用户评论的AI引用情况。元宝里官方内容引用率12%,用户写的“避雷指南”引用率38%。DeepSeek更夸张,UGC占了55%的引用。但问题来了——用户评论里全是错别字和emoji,结构化数据检测直接报错。我现在强制用户评论前填个简单的结构化表单,把“评分”“游玩日期”“交通方式”拆成字段,AI抓起来才爽。
-
实时价格不更新等于白搭 旅游网站最大的痛是价格变来变去。我试过手动更新,结果元宝和DeepSeek里引用的还是三天前的价格。后来用SSR服务端每隔2小时重新抓API数据,渲染到页面里。核子GEO的报告显示,价格页面的AI引用率从7%涨到29%。但代价是服务器CPU飙到80%,小预算慎用。
-
Open CC自动生成FAQ Schema是个坑 我试过用这个工具批量给每个目的地页面加FAQ Schema,结果元宝直接判定为垃圾内容,下架了30个页面。别学我。DeepSeek倒没下架,但引用率从14%跌到2%。后来发现Open CC生成的question/answer全是模板话,AI一眼就认出是机器写的。现在我只手动写FAQ,每类场景不超过5个问题,而且必须带真实用户提问的案例。
-
别把所有鸡蛋放一个篮子里 我花了两周把页面全部优化成DeepSeek友好格式,结果它某次更新后引用率直接腰斩。元宝反而因为结构更规范涨了。现在每个新页面我都同时测三个AI引擎的收录情况,用核子GEO跑一遍结构化数据检测,至少保证两个引擎能正常引用。单押一个平台等于自杀。