织梦跳转页面不利于收录怎么解决
问题背景
织梦 DedeCMS 站点中常出现跳转页面:旧 URL 301 到新 URL、PC 跳移动、栏目合并后的跳转、首页跳到专题页等。站长经常反馈:"页面跳转后收录掉了""蜘蛛不再抓取""权重没有传递过来"。跳转本身不是 SEO 禁忌,但跳转方式选错、链路过长、目标 URL 失效,都会直接拖累收录。
原因分析
301 与 302 的本质差异
301 永久重定向会把原 URL 的权重传递给目标 URL,蜘蛛会从索引中删除原 URL,保留新 URL;302 临时重定向不传递权重,原 URL 仍在索引中,蜘蛛会持续抓取原 URL。误用 302 替代 301 会导致权重分散,收录停滞。
跳转链过长
页面 A → 301 → B → 301 → C → 302 → D,蜘蛛跟随到第二跳后可能放弃,导致最终页面 D 不被收录。百度建议跳转不超过 1 跳,最多不超过 2 跳。
JS 跳转不被蜘蛛识别
使用 window.location.href、location.replace 等 JS 跳转,百度蜘蛛执行 JS 能力有限,常常无法跟随跳转目标。
解决步骤
一、统一用 301 永久跳转
对于内容迁移、URL 改版,必须用 301:
// PHP 代码
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://www.example.com/new-url/');
exit;
nginx 配置:
location=/old-url.html {
return 301 https://www.example.com/new-url/;
}
二、控制跳转链路
把多次跳转改为一次到位。如果 A 已 301 到 B,B 又 301 到 C,应直接改为 A → C,避免中间 B 环节。
# 旧:location=/a { return 301 /b; }
# location=/b { return 301 /c; }
# 新:location=/a { return 301 /c; }
# location=/b { return 301 /c; }
三、避免 JS 跳转
把 PC/移动适配的 JS 跳转改为 PHP 服务端跳转:
// 不推荐:JS 跳转
<script>if(/mobile/.test(navigator.userAgent)){
location.href='/m/';}</script>
// 推荐:PHP 服务端跳转
if(is_mobile_device()){
header('Location: https://m.example.com'.$uri, true, 302);
exit;
}
四、用 canonical 指明主版本
多 URL 共存(如打印版、参数版)时,在 head 中加 canonical:
<link rel="canonical" href="https://www.example.com/news/1.html">
让蜘蛛知道"虽然这是个跳转页面,但权威内容在 canonical 指向的 URL"。
五、提交跳转 URL 到死链平台
对于已下线、跳到 404 的旧 URL,整理成 silian.txt 提交到百度站长"死链提交",加速原 URL 出索引。
配置示例汇总
注意事项
- 301 跳转需要持续生效至少 6 个月,过早撤掉会让蜘蛛重新抓旧 URL。
- 跳转目标必须返回 200,不能跳到 404 或再次跳转。
- 百度对 302 的容忍度低于 Google,长期 302 容易被判为作弊。
- canonical 不能跨域名使用,跨站跳转只能用 301。
- 使用响应式模板的站点尽量减少跳转,让同一 URL 服务所有终端。
实施建议
建议把全站跳转规则梳理一遍,整理成跳转映射表,统一在 nginx 配置中维护,避免散落在 PHP、JS、模板中。每月跑一次爬虫模拟,从首页出发统计所有跳转链路,发现超过 2 跳的链路立即优化。同时把跳转日志接入站点监控,出现跳转失败、目标 404 立即告警。长期看,URL 规划要在站点重构前就敲定,避免事后大量 301 维护,是降低跳转风险的治本之策。