You need to enable JavaScript to run this app. 如何检测当前页面内Adsense JS加载时的实际响应是否为403
优惠活动
大模型
产品
解决方案
定价
更多

如何检测当前页面内Adsense JS加载时的实际响应是否为403

检测Adsense上下文相关403拦截的可落地方案

核心偏差来源:单独直接请求https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js拿到200,是因为请求没有携带你站点的页面上下文。Adsense的封禁拦截恰恰是基于请求附带的Referer站点信息、页面关联域名信息做判定,裸请求永远触发不了拦截规则,检测结果完全没有参考价值。

一、真实页面上下文内的前端检测(准确率100%)

这种方式完全模拟用户打开目标页面时的真实加载行为,结果和实际运行场景完全一致:

  • 禁用跨域fetch/XHR请求:这类跨域请求不会自动携带匹配页面上下文的Referer,还会被CORS策略拦截,根本拿不到真实状态
  • 通过动态创建script标签的方式发起探测,捕获加载结果:
    function detectBlockStatus() {
      return new Promise((resolve) => {
        // 清除页面原有adsbygoogle脚本,避免缓存干扰
        const oldScript = document.querySelector('script[src*="adsbygoogle.js"]');
        oldScript?.remove();
    
        const probeEl = document.createElement('script');
        // 加随机时间戳强制走网络请求,绕开缓存
        probeEl.src = `https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?probe=${Date.now()}`;
        probeEl.async = true;
    
        // 加载成功时触发onload
        probeEl.onload = () => {
          probeEl.remove();
          resolve({ code: 200, isBlocked: false });
        };
    
        // 加载失败时触发onerror
        probeEl.onerror = () => {
          probeEl.remove();
          // 加同域参照校验排除误判
          fetch(`/static/probe-ok.txt?t=${Date.now()}`).then(res => {
            // 同域参照请求正常,但adsbygoogle加载失败,即为Adsense403拦截
            if (res.status === 200) {
              resolve({ code: 403, isBlocked: true });
            }
          })
        };
    
        document.body.appendChild(probeEl);
      })
    }
    
  • 判定逻辑说明:浏览器出于安全限制,不会把跨域script资源的具体HTTP状态码直接暴露给JS,但Adsense返回403时的响应没有设置可执行JS所需的CORS头、返回内容是错误页而非脚本,一定会触发onerror事件。搭配同域资源的参照校验,可以完全排除网络故障、本地广告插件拦截导致的误判。

二、后端批量巡检检测(准确率约90%)

如果需要批量排查所有疑似被封禁的页面,不需要等用户实际访问,可以在后端模拟带上下文的请求:

  • 构造对https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js的请求时,强制设置两个核心请求头:
    • Referer:填待检测页面的完整URL(如https://your-domain.com/suspected-page.html)
    • User-Agent:替换为真实桌面/移动端浏览器的UA,禁用爬虫默认标识
  • 不要用空Referer发起请求,那样拿到的200和裸请求没有区别。直接读取返回的HTTP状态码:返回403即代表对应页面对应的站点上下文已被Adsense拦截,返回200即代表上下文正常
  • 这种方式仅适合批量初筛,因为Adsense会附带少量客户端环境指纹校验,最终的精准判定还是需要在真实前端页面运行环境完成。

避坑提示

  • 每次探测都要给adsbygoogle.js的请求加随机时间戳参数,避免浏览器缓存旧的加载结果导致检测失真
  • 不要把“JS加载返回200但广告位为空”的广告填充失败,和“JS加载返回403”的封禁问题混淆,两者是完全独立的判定逻辑
  • 检测过程中不要输出任何Adsense相关的配置参数到第三方接口,避免触发额外合规校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 00:06:05