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

如何阻止Next.js特定脚本在404/410页面加载?

实现方案

在Next.js的_document.js中,我们可以通过服务端获取页面状态码,再根据状态码条件渲染广告脚本,具体操作如下:

1. 在getInitialProps中获取页面状态码

修改getInitialProps方法,从上下文ctx里提取响应状态码,将其作为额外属性返回给组件:

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    // 拿到服务端响应的状态码,默认设为200兜底
    const statusCode = ctx.res?.statusCode || 200;
    return {
      ...initialProps,
      styles: React.Children.toArray([initialProps.styles]),
      statusCode // 把状态码传入组件props
    };
  }

  // ... 其他原有代码
}

2. 条件渲染广告脚本

在render方法里,通过this.props.statusCode判断当前页面状态,只在状态码不是404或410时渲染广告脚本:

render() {
  const { statusCode } = this.props;
  // 排除404和410错误页面
  const shouldLoadAdScript = ![404, 410].includes(statusCode);

  return (
    <Html lang="en">
      <Head>
        {CssBaseline.flush()}
        
        {/* 只有符合条件时才加载广告脚本 */}
        {shouldLoadAdScript && (
          <script 
            async 
            src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-************"
            crossorigin="anonymous"
          ></script>
        )}
        
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}

原理说明

_document.js是Next.js负责服务端渲染页面骨架的核心组件,getInitialProps方法会在服务端执行,能直接获取当前请求的响应状态码。通过把状态码传递到渲染阶段,就能精准控制广告脚本的加载时机,避免在404/410这类错误页面加载不必要的广告资源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:53:22