本文约 3,782 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:为了多接一个广告位,整页排名掉了
内容站变现和搜索排名之间始终存在张力。常见的情况是:站点跑通了广告,运营想在正文里多塞一个位,从「每 5 段一个」改成「每 3 段一个」,再在标题下方、正文末尾、侧边各加一个。短期收入确实涨了,两周后却发现文章页的排名开始往下掉,尤其是那些竞争激烈的词。站长容易把原因归结为「内容不够好」,但实际上百度的落地页体验评估里,广告与主体内容的比例是明确的评分项。石榴算法打击的就是「以广告为主体、正文被挤压」的低质页面。问题在于,多少算「挤压」,规范里没有一个数字公式,需要自己建立可执行的判断标准。
原理分析:百度如何评估广告与内容的比例
百度的评估不是简单数广告个数,而是从三个层面综合判断:首屏占比(用户第一屏看到的内容里,广告占多少面积、正文占多少)、正文干扰度(阅读过程中被广告打断的次数、广告与正文的视觉区分度)、主体完整性(正文是否被截断、是否需要点击才能看到全文)。其中首屏占比权重最高——移动端首屏如果一半是广告,用户点进来立刻感知到「这是个广告页」,跳出率会飙升,而跳出与停留时长又会反过来影响排序。
| 维度 | 安全区间 | 警戒区间 | 高危 |
|---|---|---|---|
| 首屏广告面积占比 | < 20% | 20%–35% | > 35% |
| 正文内广告间隔 | ≥ 4 个自然段 | 2–3 段 | 每 1 段 |
| 标题下方广告 | 不放或仅 1 个小条 | 1 个横幅 | 多个堆叠 |
| 正文是否被截断 | 完整展示 | 需点击展开 | 强制跳转 |
| 广告与正文区分 | 明确标注「广告」 | 样式接近正文 | 伪装成正文 |
需要注意,广告的可接受程度与页面本身的内容价值相关:一篇五千字的深度教程配三个广告位完全合理;一段三百字的快讯配两个广告位就属于广告为主体。所以密度标准要跟内容体量挂钩,不能只看绝对数量。
保姆级实操
步骤 1:统计现有页面的广告密度。 先把现状量化,别凭感觉。以正文段落数为基准计算插入频率:
# 统计已发布文章的平均段落数,用于推算广告位数量是否合理
wp post list --post_type=post --post_status=publish --format=ids \
| tr ',' '\n' \
| while read -r id; do
wp post get "$id" --field=content \
| grep -c '<p>'
done \
| awk '{sum+=$1; n++} END {printf "平均段落数 %.1f(样本 %d 篇)\n", sum/n, n}'
步骤 2:按段落数动态插入广告,而不是固定位置。 短文不放、长文按间隔放,这样密度天然可控。下面是按段落插入的实现,同时保证首段前不放广告:
/**
* 在正文中按段落插入广告:前 2 段不插,之后每 4 段插一次,最多 3 个
*/
add_filter( 'the_content', function ( $content ) {
if ( ! is_singular( 'post' ) || is_feed() ) {
return $content;
}
$ad_unit = '<div class="post-ad" data-ad-slot="in-article">'
. '<span class="post-ad__label">广告</span>'
. '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>'
. '<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-xxxxxxxxxxxxxxxx" data-ad-slot="1234567890"></ins>'
. '<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>'
. '</div>';
$paragraphs = explode( '</p>', $content );
$count = count( $paragraphs );
// 段落太少(短文)不放广告,避免广告占比过高
if ( $count < 8 ) {
return $content;
}
$out = [];
$ads_placed = 0;
$since_last = 0;
foreach ( $paragraphs as $i => $paragraph ) {
$out[] = $paragraph . '</p>';
$since_last++;
if ( $i >= 2 && $since_last >= 4 && $ads_placed < 3 ) {
$out[] = $ad_unit;
$ads_placed++;
$since_last = 0;
}
}
return implode( '', $out );
}, 20 );
步骤 3:用 CSS 明确区分广告与正文。 广告块要有可见的「广告」标识,且与正文样式有明确视觉差异,同时限制高度避免撑爆首屏:
.post-ad {
margin: 1.5rem 0;
padding: .5rem 0;
max-height: 280px;
overflow: hidden;
border-top: 1px dashed #e0e0e0;
border-bottom: 1px dashed #e0e0e0;
}
.post-ad__label {
display: block;
margin-bottom: .25rem;
font-size: 12px;
color: #999;
}
/* 移动端适度收紧,避免一屏被广告占满 */
@media (max-width: 767px) {
.post-ad { max-height: 200px; }
}
步骤 4:检查首屏。 用移动端视口打开文章,第一屏(约 667px 高)内广告不应超过一个,且正文首段必须完整可见。标题正下方、正文第一段内不要放广告。
步骤 5:给高价值页面做减法。 把带来主要流量的前 20 个页面单独列出,广告位减半,观察两周的排名与收入变化。多数情况下排名回升带来的流量增益会超过减少的广告收入。
步骤 6:区分广告与自有推广。 站内推荐、自家产品引导不算商业广告,但同样占用视觉空间,计算面积时应一并计入。
常见踩坑
- 用固定位置插入(第 2 段后必插),短文章里广告占比直接过半。
- 案例: 某站把所有文章页的「相关文章」模块替换为广告位,又在正文每两段插一次,移动端首屏几乎全是广告,两周内移动端点击率下降 62%,被判定为低质广告页,恢复用了将近三个月。
- 广告用
float或绝对定位压在正文上,用户选文字时选到广告。 - 广告位与正文同字体同色,用户分不清哪段是正文,被判定为伪装广告。
- 用 JS 动态插入广告,抓取时看不到,但渲染后面积很大,抓取与体验评估结果不一致。
- 只在 PC 端控制密度,移动端模板另有一套更密的广告配置。
- 广告容器没有固定高度,加载时页面跳动(CLS 问题),用户误触广告。
总结
广告密度的判断标准是「主体内容是否仍然是页面的主角」。落地执行时用三个数卡住:首屏广告面积不超过 20%、正文内广告间隔不少于 4 段、短文(段落少于 8)不放正文广告。行动清单:统计平均段落数 → 改成按段落动态插入 → CSS 标识并限高 → 移动端视口核对首屏 → 高价值页减半试运行 → 把自有推广一并计入面积。变现与排名不是二选一,把广告控制在合理区间内,两者可以长期共存。弹窗类广告的风险更高,见 百度移动端弹窗与体验算法;首屏加载问题见 移动端首屏加载优化。
