分享 Next.js 15.2 之后新版本的一个坑,可能会影响你的 SEO 收录 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
avenger
V2EX    Next.js

分享 Next.js 15.2 之后新版本的一个坑,可能会影响你的 SEO 收录

  •  2
     
  •   avenger
    bolechen 94 天前 2656 次点击
    这是一个创建于 94 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Next.js 15.3.1 版本中引入了一个性能优化功能"流式元数据"( streaming metadata ),但这个优化带来了严重的 SEO 问题。元数据标签(如 <title>, <meta>, <link>)被渲染在 <body> 中而不是 <head> 中。

    社区中对这个改动意见很大,但是官方暂时没有修复的打算。

    影响范围

    • Lighthouse SEO 评分:直接检测失败,因为 Lighthouse 明确检查 <head> 中的元数据
    • Google Search Console:报告 "Duplicate without user-selected canonical" 错误
    • 搜索引擎爬虫:可能无法正确识别页面元数据
    • 社交媒体分享:Open Graph 标签可能无法正常工作

    临时解决方法:

    next.config.ts 中添加以下配置:

    const nextCOnfig= { // 强制所有用户代理接收阻塞式元数据 htmlLimitedBots: /.*/, // 这个正则表达式匹配所有用户代理 // 其他配置... }; 
    • 或者可以针对特定爬虫进行配置:/googlebot|bingbot|baiduspider/

    相关讨论在: https://github.com/vercel/next.js/issues/79313#issuecomment-2892288965

    官方文档相关说明: https://nextjs.org/docs/app/api-reference/functions/generate-metadata#streaming-metadata

    --

    实际案例

    在我的佛经项目中,添加此配置后:

    • Lighthouse SEO 评分从 80+ 提升到 100
    • Google Search Console 中的重复规范错误消失

    PS. 分享一个 Lighthouse 全满分的小彩蛋

    PS 2. 最近用 Next.js 在做一个 AI 阅读佛经的网站,欢迎大家体验:

    https://rushiwowen.co

    15 条回复    2025-09-05 09:11:01 +08:00
    gotoschool
        1
    gotoschool  
       94 天前
    我靠 100% 这么牛? 对了,你是某飞的学员么
    avenger
        2
    avenger  
    OP
       94 天前
    @gotoschool 并不是
    avenger
        3
    avengr  
    OP
       91 天前
    @gotoschool 只是一个有强迫症的中年程序员罢了
    navk
        4
    navk  
       90 天前
    SOE 优化能分享下相关经验吗?
    avenger
        5
    avenger  
    OP
       90 天前
    @navk 基本就是参考 Lighthouse 的建议来的,哪里有问题就改哪里,不懂的就问 Claude

    如果你也是用 Next.js ,本身对 SEO 支持算是比较友好的,可以参考官方文档关于 Metadata 那部分

    https://nextjs.org/docs/app/guides/production-checklist#metadata-and-seo
    liuliuliuliu
        6
    liuliuliuliu  
    PRO
       90 天前
    牛的,网站做的很棒
    0x400
        7
    0x400  
       90 天前 via iPhone
    非常好的网站,已经开始参悟了
    avenger
        8
    avenger  
    OP
       89 天前
    @0x400
    @liuliuliuliu

    随喜赞叹
    ZztGqk
        9
    ZztGqk  
       89 天前 via iPhone
    这个我觉得没问题,也没必要修复吧,这算 feature ,不过 nextjs 对于这种 default break change 确实比较多。rsc 的 streaming 的目的就是为了避免等待慢接口,而给 meta 做正好补齐了,我们正好有这个需求,针对 bot 等一下慢接口没啥问题,反而针对正常访问还能提速。
    avenger
        10
    avenger  
    OP
       89 天前
    @ZztGqk 从加载速度来说没问题,但是 google 不认啊
    youyouzi
        11
    youyouzi  
       89 天前
    牛批,但是我用 "next": "15.3.2", 版本没事啊,就随便配置了一些 generateMetadata 也是满分 SEO ,我都惊呆了,都还没配置站点地图和 robots 那些呢
    DomenicCarter
        12
    DomenicCarter  
       86 天前
    ![]( http://obsidian-files.oss-cn-beijing.aliyuncs.com/PasteFile-2025-09-05_8-48-11.png)


    ![]( http://obsidian-files.oss-cn-beijing.aliyuncs.com/PasteFile-2025-09-05_8-48-50.png)

    我看了一下最近的新站,好像没看到 OP 提到的现象,依然在 head 里面啊,没跑到 body 里. 网址: https://gamocean.com/ ,要不 OP 帮我看看,是不是我没看对.
    avenger
        13
    avenger  
    OP
       86 天前
    @DomenicCarter metadata 要动态生成的才会这样,你试一下给不同页面生成不同 meta 试一下,用 generateMetadata 试一下
    DomenicCarter
        14
    DomenicCarter  
       86 天前
    真的是哎,我这个页面是动态 metadata ( https://gamocean.com/game/draw-save-puzzle ),title 果然跑 body 里了,难受。
    DomenicCarter
        15
    DomenicCarter  
       86 天前
    感谢 OP 分享,我已经使用你的方法修复了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2639 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 110ms UTC 11:50 PVG 19:50 LAX 03:50 JFK 06:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86