You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Google爬取__NEXT_DATA__中的类URL内容?

解决Next.js中__NEXT_DATA__被Google爬取导致404的问题

给你两个简单有效的方案,都不会触发水合错误:

  • 方案一:给__NEXT_DATA__脚本添加data-nosnippet属性
    自定义pages/_document.js(App Router环境下是app/layout.js里的Script组件),在输出__NEXT_DATA__的脚本标签上加上data-nosnippet属性。这个属性是Google官方支持的标记,会直接告知爬虫忽略该脚本内的所有内容,完全不影响客户端水合——因为只是给脚本增加了一个标记,数据本身没有被修改。
    Pages Router示例代码:

    import Document, { Html, Head, Main, NextScript } from 'next/document'
    
    class MyDocument extends Document {
      static async getInitialProps(ctx) {
        const initialProps = await Document.getInitialProps(ctx)
        return { ...initialProps }
      }
    
      render() {
        return (
          <Html>
            <Head />
            <body>
              <Main />
              {/* 给NextScript添加data-nosnippet属性 */}
              <NextScript data-nosnippet />
            </body>
          </Html>
        )
      }
    }
    
    export default MyDocument
    
  • 方案二:从根源移除不必要的类URL字段
    如果那些触发404的类URL并非客户端渲染必需的内容,直接在getStaticProps或getServerSideProps中过滤掉这些字段。比如你的数据里存在unusedUrl这类冗余字段,直接删除它,这样__NEXT_DATA__里就不会出现这些URL,自然不会被Google爬虫误判。
    示例代码:

    export async function getStaticProps() {
      const data = await fetchSomeData()
      // 移除不必要的类URL字段
      delete data.unusedUrl
      return { props: { data } }
    }
    

你之前用的<!--googleoff: index-->只对HTML文本内容生效,脚本内的内容爬虫依旧会解析,所以无效。而base64编码会破坏Next.js的水合机制——客户端需要原样解析__NEXT_DATA__,编码后必然会报错。上面两个方案都是官方兼容的,不会产生副作用。

内容的提问来源于stack exchange,提问作者funerr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:22:13