本文约 3,513 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:文章写了两百篇,重点页面却一直排不上去
很多站长的站点内容量不小,但真正带来转化的”产品页””服务页”始终排在第二页。检查外链没资源、内容也不差,问题往往出在内部链接结构:全站只有”最新文章”这一个入口,老文章发布三个月后就被挤出首页,从首页点进去要五六层才能到达,爬虫分给它的抓取频次自然越来越低。
内部链接是你能 100% 控制的唯一权重杠杆。外链求人,内链求己。Google 的 PageRank 传递逻辑在站内部同样成立:一个页面获得的内部入链越多、来源页面越重要,它被抓取和索引的优先级就越高。反过来,如果全站 2000 篇文章里,”联系我们”页被 2000 个页面链接(页脚),而产品页只有 3 个页面链接,那么搜索引擎收到的信号就是”联系我们最重要”,这显然与商业目标相反。
原理分析:三个变量决定内链效果
点击深度(Click Depth):从首页出发,最少需要几次点击到达目标页。行业经验值是核心商业页 ≤ 3 次点击,普通文章 ≤ 4 次。Screaming Frog 爬完后看 “Crawl Depth” 列就能拿到这个数据。深度越大,爬虫回访频率越低。
锚文本(Anchor Text):内链锚文本是 Google 判断目标页主题的重要依据。全站都用”点击查看””更多”这类无意义锚文本,等于浪费了所有传递机会;反过来,把某个关键词做成全站统一锚文本指向同一页面,也可能过度优化。合理做法是”核心词 + 变体”混合,比例上精确匹配不超过三成。
权重倾斜(Sculpting):把有限的链接额度向重要页面倾斜。注意 Google 早已不再支持用 nofollow 做 PageRank sculpting——2009 年官方明确说明 nofollow 的权重是被”丢弃”而非”重新分配”,所以靠 nofollow 节流内链是无效操作。真正有效的是减少低价值页面的入口数量,而不是给它们加 nofollow。
| 页面类型 | 建议全站入链数 | 位置 |
|---|---|---|
| 首页 | 全站(面包屑 + Logo) | 全局 |
| 核心产品/服务页 | 50 以上 | 导航 + 正文 + 侧边 |
| 重点文章 | 10–30 | 正文相关推荐 |
| 普通文章 | 3–8 | 相关文章模块 |
| 标签页 | 少或不链 | 避免膨胀 |
保姆级实操
步骤 1:爬一遍,拿到基线数据。 Screaming Frog 免费版可爬 500 个 URL,爬完在 “Internal → Inlinks” 和 “Crawl Depth” 两列看分布。导出后按入链数升序排,最靠前且深度 > 4 的就是需要补链的页面。
步骤 2:用 SQL 统计每篇文章的内链出度。 直接查数据库比装插件更可控,尤其内容量大时。
-- 统计每篇已发布文章正文中的站内出链数量
SELECT p.ID,
p.post_title,
ROUND((LENGTH(p.post_content) - LENGTH(REPLACE(p.post_content, 'href="', ''))) / 6) AS link_cnt
FROM wp_posts p
WHERE p.post_type = 'post'
AND p.post_status = 'publish'
ORDER BY link_cnt ASC
LIMIT 30;
link_cnt 为 0 或 1 的文章,就是内链建设的优先对象。
步骤 3:给”重点页”建立固定入口。 在导航菜单、侧边栏”热门服务”小工具、以及每篇文章结尾的”相关阅读”里,固定指向 3–5 个核心商业页。锚文本用业务词,例如”WordPress 外贸建站服务”,不要用”点击这里”。
步骤 4:用代码自动生成相关文章内链。 按共同标签数排序,比按时间排序相关性更高,也能让老文章持续获得入链。
<?php
// 相关文章:按共同标签数排序,输出到文章结尾
function mmm_related_posts($post_id, $limit = 5) {
$tags = wp_get_post_tags($post_id, ['fields' => 'ids']);
if (empty($tags)) return '';
$q = new WP_Query([
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => $limit,
'post__not_in' => [$post_id],
'tag__in' => $tags,
'orderby' => 'comment_count', // 间接体现历史受欢迎度
'no_found_rows' => true,
]);
if (!$q->have_posts()) return '';
$out = '<nav class="related-posts" aria-label="相关阅读"><h2>相关阅读</h2><ul>';
foreach ($q->posts as $p) {
$out .= sprintf(
'<li><a href="%s">%s</a></li>',
esc_url(get_permalink($p->ID)),
esc_html(get_the_title($p->ID))
);
}
return $out . '</ul></nav>';
}
在 single.php 的 the_content 之后调用 echo mmm_related_posts(get_the_ID()); 即可。建议配合对象缓存(Redis / Memcached)避免每次请求都查库。
步骤 5:清理无效入口。 关掉按日期归档页面的侧边栏链接(内容薄、易被判定低质量),减少标签云链接数量,避免”标签页比文章还多”的倒挂结构。
步骤 6:定期复查。 每季度重爬一次,对比重点页的入链数与点击深度是否改善。锚文本分布可与 关键词研究与布局 一起规划。
常见踩坑
- 案例: 某站把全部 800 篇文章的结尾都加上”点击查看我们的服务”指向同一个产品页,三个月后该产品页目标词排名从第 8 掉到第 30。锚文本 100% 精确匹配且来源高度同质,属于典型的内部过度优化。改成”服务介绍””定制方案””查看案例”等变体后,两个月恢复。
- 用
nofollow给内链做权重节流,纯属无效劳动,Google 明确表示 nofollow 的权重是被丢弃的。 - 侧边栏放”最新文章 20 条”,导致首页每个页面都把权重灌向最新那几篇,老文章永远拿不到入链。
- 相关文章模块只按发布时间取最近 5 篇,语义相关性为零,Google 很难从中提取主题信号,用户点击率也低。
- 自动内链插件(如 Link Whisper)全站批量插入,出现同一段文字被链接三次、或锚文本指向 404 的情况,上线前必须抽样检查 50 个页面。
- 分页的第 2、3 页没有向正文页的链接,导致深层文章只靠”下一页”串联,深度被人为拉高。
- 面包屑导航缺失,文章页只有单向向上的链接,缺少返回栏目页的通路,栏目页权重无法聚合。
总结
内链建设的目标不是”链接多”,而是”重要页面离首页足够近”。行动清单:先爬全站拿到点击深度与入链数基线;把核心商业页的入链数拉到 50 以上、深度压到 3 以内;把锚文本做成”核心词 + 变体”的混合分布,精确匹配控制在三成以内;删掉无意义的日期归档与标签云入口;每季度复查一次。记住,内链是你唯一能完全自主调配的权重资源,效果虽不如外链迅猛,但胜在稳定可控。若想进一步理解抓取预算的分配逻辑,可参考 Google 抓取预算优化。
