React项目中Google Ads本地不显示问题及本地展示可行性咨询
React项目中Google Ads本地无法显示(data-ad-status: unfilled)问题
我在React项目里用下面的代码嵌入Google Ads,代码执行无报错,但localhost环境下始终看不到广告。检查生成的HTML后发现data-ad-status为unfilled,不清楚原因。另外想确认:本地环境能不能展示Google Ads?我没装广告拦截器,是按照指定教程操作的。
我的实现代码
import React from 'react' import { useEffect } from 'react'; import {Bling as GPT} from "react-gpt"; function Ads() { useEffect(() => { window.adsbygoogle = window.adsbygoogle || []; window.adsbygoogle.push({}); }, []) return ( <> <ins className="adsbygoogle" style={{display:"block", width:"250px"}} data-ad-format="fluid" data-ad-layout-key="-fb+5w+4e-db+86" data-ad-client="ca-pub-1716395586958019" data-ad-slot="9360082050" data-adtest="on"> </ins> </> ) }
生成的HTML结果
<ins class="adsbygoogle" data-ad-format="fluid" data-ad-layout-key="-fb+5w+4e-db+86" data-ad-client="ca-pub-1716395586958019" data-ad-slot="9360082050" data-adtest="on" style="display: block; width: 250px; height: 315px;" data-adsbygoogle-status="done" data-ad-status="unfilled"> <div id="aswift_1_host" tabindex="0" title="Advertisement" aria-label="Advertisement" style="border: none; height: 315px; width: 250px; margin: 0px; padding: 0px; position: relative; visibility: visible; background-color: transparent; display: inline-block;"> <iframe id="aswift_1" name="aswift_1" style="left:0;position:absolute;top:0;border:0;width:250px;height:315px;" sandbox="allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation-by-user-activation" width="250" height="315" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" src="https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-1716395586958019&output=html&h=315&slotname=9360082050&adk=179383159&adf=4280140434&pi=t.ma~as.9360082050&w=250&lmt=1686243940&rafmt=11&format=250x315&url=http%3A%2F%2Flocalhost%3A3000%2F&adtest=on&wgl=1&uach=WyJXaW5kb3dzIiwiMTUuMC4wIiwieDg2IiwiIiwiMTE0LjAuNTczNS45MCIsW10sMCxudWxsLCI2NCIsW1siTm90LkEvQnJhbmQiLCI4LjAuMC4wIl0sWyJDaHJvbWl1bSIsIjExNC4wLjU3MzUuOTAiXSxbIkdvb2dsZSBDaHJvbWUiLCIxMTQuMC41NzM1LjkwIl1dLDBd&dt=1686243940235&bpp=18&bdt=833&idt=119&shv=r20230606&mjsv=m202306050101&ptt=9&saldr=aa&abxe=1&cookie=ID%3D0131efc224260eb6-22fb51662ce000b1%3AT%3D1686054747%3ART%3D1686243870%3AS%3DALNI_Mau56qS_H-iE3bKsxmOr1TCP2_z-A&gpic=UID%3D00000c4416918412%3AT%3D1686054747%3ART%3D1686243870%3AS%3DALNI_MY2nh_dm0Uime-_txjeT8hChnoM8w&prev_fmts=0x0&nras=1&correlator=1903045135563&frm=20&pv=1&ga_vid=725767110.1686051615&ga_sid=1686243940&ga_hid=1689683430&ga_fc=1&u_tz=60&u_his=1&u_h=900&u_w=1440&u_ah=852&u_aw=1440&u_cd=24&u_sd=2&dmc=8&adx=53&ady=1021&biw=1423&bih=781&scr_x=0&scr_y=527&eid=44759837%2C44759875%2C44759926%2C31075127%2C44788441%2C31067147&oid=2&pvsid=4370208828608287&tmod=82592742&uas=0&nvt=2&fc=1920&brdim=0%2C0%2C0%2C0%2C1440%2C0%2C1440%2C852%2C1440%2C781&vis=1&rsz=%7C%7CeE%7C&abl=CS&pfx=0&fu=128&bc=31&td=1&ifi=2&uci=a!2&fsb=1&xpc=2FhlrG9d3m&p=http%3A//localhost%3A3000&dtd=137" data-google-container-id="a!2" data-load-complete="true"> </iframe> </div> </ins>
问题解答
1. 本地环境能不能展示Google Ads?
可以展示测试广告,但无法展示真实广告。Google Ads官方不支持localhost这类未验证的本地域名投放真实广告,即使开启data-adtest="on"也无法获取真实广告库存。但你可以使用Google提供的官方测试广告单元,在本地环境模拟广告显示效果。
2. data-ad-status: unfilled的原因
- 域名未验证:你的AdSense账号没有验证localhost域名,Google不会为未验证的域名分配广告。
- 广告库存不匹配:即使开启测试模式,你的广告尺寸、布局参数(比如
data-ad-layout-key)可能没有对应的测试广告库存,导致填充失败。 - 代码加载问题:你引入了
react-gpt但未实际使用,当前依赖useEffect初始化adsbygoogle的方式可能存在加载时机问题,建议直接在HTML中引入官方脚本。
3. 修正方案
步骤1:在public/index.html中添加官方脚本
在<head>标签内添加:
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1716395586958019" crossorigin="anonymous"></script>
步骤2:修改React组件,使用测试广告单元
替换成Google官方的测试data-ad-client和data-ad-slot:
import React, { useEffect } from 'react'; function Ads() { useEffect(() => { (window.adsbygoogle = window.adsbygoogle || []).push({}); }, []); return ( <ins className="adsbygoogle" style={{ display: "block", width: "250px" }} data-ad-format="fluid" data-ad-layout-key="-fb+5w+4e-db+86" data-ad-client="ca-pub-3940256099942544" // 官方测试client data-ad-slot="2198419638" // 官方测试slot data-adtest="on"> </ins> ); } export default Ads;
这样修改后,localhost环境下应该能看到Google的测试广告,验证代码逻辑是否正确。等部署到已验证的正式域名后,再替换回你自己的data-ad-client和data-ad-slot即可。
内容的提问来源于stack exchange,提问作者KnightMove
相关产品推荐
相关产品推荐

