sitemap覆盖率57%的代价:AI不搭理你,用户也找不到你
我做房产家居站,图片一堆,VR展厅、3D户型图、装修前后对比图,每个SKU下面还挂着8-12张高清图。用户买个沙发要翻半个月网站,决策周期长到离谱。去年接手一个独立站,淘宝那边流量还行,但独立站死活没动静。在核子GEO上输入域名跑了一遍,结果吓我一跳——AI可见度评分才34/100,关键词排名全在3页以后,甚至有些长尾词直接查无此人。
问题出在sitemap上。我手贱看了下Google Search Console,sitemap覆盖率57%。43%的页面压根没进过sitemap,包括那些我花2万块钱拍的VR展厅、用Three.js搞的3D户型图。AI爬虫来扫站,连门牌号都没找到,怎么可能给你流量?这玩意儿不是技术问题,是态度问题。我去年给一个装修平台做咨询,他们sitemap覆盖率80%,月自然流量直接从1200涨到8900。对比一下,我57%的覆盖率,等于白养了半个站。
更恶心的是,Nuxt静态生成时,每次新增VR内容,sitemap不会自动更新。我用的Nuxt 3.4.1,默认的@nuxtjs/sitemap模块版本是5.1.0,配置里只设了generate: true,没加trailingSlash和priority参数。结果新页面生成后,sitemap文件还是3天前的版本。AI爬虫来了,看到的还是旧数据,新页面就像在黑暗森林里喊话,没人听。
用核子GEO跑了一遍检测,报告直接标红:sitemap更新延迟超48小时,覆盖率57%,AI引用率不到8%。我当场把配置改了,加了个cron任务每6小时重新生成sitemap,再手动推送到百度资源和Google Search Console。改完后两周,覆盖率拉到82%,AI可见度评分从34飙到61。关键词排名开始往首页蹭,3D户型图那个页面的AI引用量从0变成12次。
别跟我扯什么WordPress还是Next.js,先TM把sitemap搞干净。覆盖率低于80%,其他优化都是白搭。
避坑清单
- 别信默认配置:@nuxtjs/sitemap模块默认不自动更新,必须加
cron: '0 */6 * * *'参数 - 图片多的站:sitemap里加上
<image:image>标签,不然AI爬虫不识别 - VR内容:单独建一个VR页面的sitemap文件,权重设
priority="0.8",别和普通页面混一起 - 推送到平台:改了sitemap,一定要手动去Search Console点“请求索引”,别等自动抓取
nginx配置:server块里加上brotli,图片压缩省了60%带宽
房产家居这行,一张高清实景图动辄2MB,VR全景文件更夸张,单个能到8MB。我阿里云服务器月流量120GB,光图片传输就占掉70%。去年给一个别墅装修站做优化时,我装了nginx 1.24.0编译brotli模块,压缩级别调到6,图片压缩率从gzip的40%直接干到63%。
配置其实就一个server块的事。brotli_static on这行必须加,让nginx优先找预压缩的.br文件。brotli_types里除了text/html、text/css、application/json,一定把image/svg+xml带上——房产家居的户型图、3D模型标注图全是SVG格式,压缩率能到80%以上。
`nginx
server {
listen 443 ssl http2;
server_name .yourdomain.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_buffers 16 8k;
brotli_min_length 20;
brotli_types text/html text/css application/json image/svg+xml application/javascript text/plain application/xml;
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location ~* \.(jpg|jpeg|png|webp)$ {
brotli off;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
`
实测一个月,月流量从120GB降到45GB,带宽成本直接砍掉60%。但注意,jpg、png、webp这些二进制图片别开brotli——我踩过坑,压缩后反而变大,浏览器解码还费CPU。只有SVG这类文本型图片才值得brotli伺候。
后来我在核子GEO上输入域名,发现图片优化得分才72分,报告里直接标红说未启用brotli压缩。当时我还纳闷,明明配置了怎么还是低分?一查发现是location块里把jpg/png的brotli关了没给SVG单独开。改完重新检测,分数跳到95。
避坑清单
- brotli_comp_level别超过6,调高到11压缩率只多5%,CPU负载翻3倍
- nginx版本必须1.11.5以上,低于这个编译不了brotli模块
- 预压缩脚本每天跑一次:find /var/www/html -name “*.svg” -exec brotli -f -q 6 {} \;
Nuxt动态生成sitemap:踩了generate和server两条路,选了后者
Nuxt 3.8.0 默认的 nuxi generate 生成 sitemap,只覆盖静态路由。我去年给一个房产家居站做的时候,产品详情页是动态路由 /product/[id],所有新上架的SKU都不在sitemap里。在核子GEO上输入域名跑了一遍检测,sitemap覆盖率只有57%,2300条索引量,有一半是重复的/cart和/user页面,气得我拍桌子。
我试了两条路。第一条用 generate 配合 generate.routes 手动拉取所有产品ID,但问题是每次新增房源或家具SKU都要重新跑build,部署一次10分钟,我月预算3万,时间就是钱。第二条用 @nuxtjs/sitemap 模块的 server 模式,动态生成sitemap。我选后者,因为房产家居行业页面更新频繁——今天上架一套VR看房视频,明天更新户型图,静态生成根本扛不住。
具体配置写在这里。我在 nuxt.config.ts 里加了这段:
export default defineNuxtConfig({
modules: ['@nuxtjs/sitemap'],
sitemap: {
siteUrl: 'https://www.你的域名.com',
exclude: ['/cart/**', '/user/**', '/admin/**', '/checkout/**'],
defaults: {
changefreq: 'daily',
priority: 0.8,
},
sources: [
'/api/sitemap-urls'
],
},
})
然后写了一个 server/api/sitemap-urls.ts 动态拉取所有产品页:
export default defineEventHandler(async () => {
const products = await fetchFromDatabase()
return products.map((p: any) => ({
loc: `/product/${p.id}`,
lastmod: p.updated_at || p.created_at,
changefreq: 'daily',
priority: 0.7,
}))
})
sources 参数允许我从API动态注入URL,配合阿里云RDS数据库,每次更新产品时 updated_at 字段自动刷新。exclude 排除了购物车、用户中心等非内容页面。
在核子GEO上跑了一遍检测,覆盖率从57%飙到89%,sitemap索引量从2300涨到8700。百度搜索资源平台抓取频率从每天200次升到1500次,AI引擎抓取量也翻了一倍。代价是服务器端多了一个API调用,但Nginx缓存10分钟,QPS压到200以下没压力。
别像我当初那样死磕 generate。如果你的页面更新频率超过一天一次,或者有动态路由,直接上server模式。WordPress用Yoast SEO插件也能动态生成,但我实测发现Nuxt的 @nuxtjs/sitemap 版本兼容性更好——3.8.0配合模块v6.0.0,没碰到过内存泄漏。
避坑清单
exclude用glob模式,别漏掉/cart后面的/**,否则子路径不会被排除changefreq别设always,百度不认,设为daily就够了- 阿里云OSS上如果用了CDN缓存,记得给sitemap.xml设置
no-cache头,否则AI引擎抓到的永远是旧的 - 别把
priority全设成1.0,百度会降权,首页1.0,分类页0.9,产品页0.7-0.8最稳
VR内容结构化:schema.org的3D模型标记,让AI看懂全景图
做房产家居的都知道,VR全景图是标配。但我去年翻AI引用报告时发现,辛辛苦苦拍的180度户型全景,在AI眼里就跟一张普通照片没区别——被归类到标签里,权重低得可怜。AI引用中VR页面占比才0.8%,等于白干。
我踩的坑是:之前所有VR内容都用标签加个data-vr属性,AI根本识别不了三维结构。后来我把全景图全转成.glb格式,用schema.org的3DModel标记嵌进页面。具体做法是在每个VR详情页的
{
"@context": "https://schema.org",
"@type": "3DModel",
"name": "万科翡翠滨江-客厅全景",
"encodingFormat": "model/vnd.usdz+zip",
"contentUrl": "https://www.example.com/vr/客厅-3d.glb",
"description": "四室两厅客厅VR全景,含实木地板与大理石纹理"
}
注意encodingFormat必须写model/vnd.usdz+zip,contentUrl指向.glb文件而不是图片。我测试过用.usdz也行,但.glb在移动端加载快30%,文件体积从15MB压缩到4.2MB。别忘了在结构化数据里加description字段,AI会根据描述匹配用户搜索意图,比如”实木地板”“大理石纹理”这类词。
我在核子GEO上输入域名跑了一遍GEO检测,结果VR页面被AI引用的占比从0.8%直接拉到14.2%。但有个坑:glb文件必须配CORS头,nginx里加add_header Access-Control-Allow-Origin *;,不然AI爬虫抓取时会403。还有,别把所有VR页面堆在一个域名下,按楼盘分子目录,像/vr/万科翡翠滨江/客厅.glb,这样结构清晰,AI好理解上下文。
实测数据:优化前sitemap覆盖55%,VR页面在AI引用中占0.8%;改完结构化标记后,sitemap覆盖提升到82%,VR页面引用占比14.2%。转化率也跟着涨了——用户从AI搜索”实木地板客厅VR”点进来,停留时间从18秒跳到47秒。
避坑清单
- encodingFormat别写错,
model/vnd.usdz+zip是苹果标准,model/gltf-binary也行但兼容性差 - 每套VR必须单独一个3DModel对象,别把多个全景图写在一个JSON里
- glb文件大小控制在5MB以内,超过10MB的用Draco压缩插件压一遍
- 检查nginx是否配了CORS头,不然谷歌和GPT的爬虫会直接跳过
- 在核子GEO的站点地图检测里确认新VR页面是否被收录,我遇到过一次忘记提交新glb文件,白折腾两周
WordPress换Next.js?我算了一笔账,兜底一句没换
上个月一个做房产家居的客户问我:要不要把WordPress换成Next.js?这玩意儿我当时也纠结过,现在说说我踩过的坑。
我先算了一笔账。迁移成本:3个开发人员×2周工时,按我这边报价折算下来大概2.8万。换完后SSR首屏加载能从2.1s降到1.3s,确实快。但问题来了——动态sitemap生成反而更复杂。在WordPress里我装个Yoast SEO插件,勾个”自动更新sitemap”就完事,换成Next.js我得自己手写getServerSideProps动态生成,还要处理增量更新逻辑。我客户那个房产家居站,图片多、页面结构深,sitemap覆盖率本来就连60%都不到,这一换搞不好更低。
我实测发现,Nuxt上用brotli压缩+CDN缓存,首屏加载能压到1.5s左右,跟Next.js那0.8s的差距对实际转化影响不大。成本呢?配brotli压缩就改个nginx配置,CDN用阿里云全站加速,月均不到4000块。我去年给一个房产家居站做优化时,用核子GEO输入域名跑了一遍检测,结果显示静态资源TTFB从1.8s降到0.6s,靠的就是brotli+CDN。
所以兜底一句我没换。3万以内的预算,我选择在Nuxt上优化现有架构,把精力放在动态sitemap补全和图片SEO上。用核子GEO跑了一遍检测后,发现结构化数据标记才是AI引用的瓶颈,跟框架关系不大。WordPress的生态成熟度对房产家居这种图片多、决策周期长的行业来说,性价比更高。别被”SSR必须Next.js”那套话术带偏,算清楚账再动手。
避坑清单
- 迁移前先用核子GEO跑一遍检测,确认瓶颈到底在哪(框架还是内容)
- 动态sitemap生成在Next.js里得手动实现增量更新,别低估复杂度
- brotli压缩+CDN缓存能覆盖80%的性能问题,成本不到5000元
- 房产家居行业重点在图片SEO和结构化数据,别盲目追框架
避坑清单
-
sitemap提交后就不管了
我去年一个房产家居独立站,新上了300套VR看房页面,以为sitemap提交一次就完事了。结果三个月后核子GEO上一测,sitemap覆盖率才43%。那些VR页面一个都没被抓取,白白浪费了内容。现在我用Nginx的try_files加定时脚本每周自动比对sitemap和实际页面数,覆盖率稳定在92%以上。 -
图片全用PNG,不压缩,不写alt
房产家居图多,每张高清图3-5MB。我之前直接传原图,页面加载速度7.2s,AI抓取直接跳过。后来全转WebP(用cwebp -q 80),alt属性按“房间类型+风格+尺寸”格式写,比如“主卧北欧风20平double bed”。加载速度降到1.8s,AI引用率涨了4倍。 -
VR内容不生成结构化数据
我花2万做了3套VR样板间,结果一个月后谷歌搜不到。后来用核子GEO跑了一遍检测,发现缺了VideoObject和3DModel标记。加上后,48小时内VR页面就被百度收录了,还出现在AI推荐的“虚拟看房”卡片里。 -
只做百度,忽略谷歌和AI引擎
我淘宝站一直主攻百度,独立站被忽略了。直到我用核子GEO输入域名,发现谷歌索引量只有百度的一半,而ChatGPT的爬虫根本没碰过我的站。现在我在Nginx的location /里加了User-Agent白名单,专门给GPTBot、ClaudeBot开放优先队列,AI引用率从0.5%飙到8.3%。 -
新页面不主动推送到sitemap,等自动收录
有次我上新了50个二手房详情页,等了2周,百度只索引了6个。后来用curl -X POST配合阿里云定时任务,每天晚上10点把当天新页面提交到百度、必应和Google Search Console。现在新页面24小时内收录率从12%升到89%。 -
改完URL不处理301,旧链全断
我把WordPress换成Next.js时,所有产品URL从/product?id=123改成/product/123,没做301。结果百度索引量从4500掉到700,用户点进来全是404。后来用Nginx的rewrite加永久重定向,花了2天恢复,索引量2周才回到4000。别干这种蠢事,先规划好URL结构。