你是不是也遇到过这种情况:辛辛苦苦写了一篇干货,结果百度搜出来还是 article.php?id=892&source=weibo 这种链接?点进去连自己都下意识多点两下确认——这真是我写的那篇吗?

别怪搜索引擎不给面子。它不是不想收,是真怕点进去发现页面早变样了。URL 就是你网站的门牌号,歪歪扭扭贴张纸条写着“找老王请敲三下”,谁敢来?

动态 URL 到底哪里得罪了搜索引擎?

搜索引擎爬虫看到问号 ? 和等号 =,第一反应不是“哦这是个参数”,而是“这页面可能下一秒就 404”。

有个做母婴用品的站,详情页 URL 带着 utm_mediumref_idv=2 三个参数,半年下来,除了首页和几个爆款,其他页面几乎没被收录。改成 /product/baby-bottle-001 后,两周内新页面陆续出现在搜索结果里。

用户那边更直接:微信里发一个 /p?id=773&tag=2024,朋友点开前先截图发群里问“这链接安全吗?”——信任感,就在地址栏里碎成渣。

怎么快速自检?打开任意一个内容页,盯着浏览器地址栏看三秒:

  • ?& 吗?
  • 参数超过两个吗?
  • 斜杠 / 数一数,超过 3 个了吗? 只要中一条,这个 URL 就该进优化清单了。

用 Rewrite 规则把问号藏起来:3 个核心步骤

你不用写代码,只需要改几行配置。Apache 和 Nginx 都支持,而且规则写法非常接近。

第一步,确认你的服务器能跑 Rewrite。
Apache 用户:检查 .htaccess 文件能不能生效(多数虚拟主机默认开启);
Nginx 用户:直接在 server 块里加 rewrite 指令就行,不需要额外模块。

第二步,写一条最常用的规则。
比如旧链接是 news.php?id=456,你想变成 /news/456.html
Apache 写法(放进 .htaccess):

RewriteRule ^news/([0-9]+)\.html$ news.php?id=$1 [L]

Nginx 写法(放进 nginx.confserver 区块):

rewrite ^/news/([0-9]+)\.html$ /news.php?id=$1 last;

第三步,测试。
打开 /news/456.html,看页面是否正常加载,地址栏是否保持干净。如果报 404,大概率是路径没对上——比如你把文件放在 /content/news.php,但规则里写的是 /news.php,差一个目录就全崩。

目录层级别超过 3 层:扁平结构才是王道

见过最深的 URL 是 /cn/zh-hans/products/home/kitchen/coffee/machines/drip/2024/best-drip-coffee-maker —— 光数斜杠就喘不过气。这种结构对人不友好,对爬虫更不友好:它会默认“离首页越远,越不重要”。

一个本地生活类站点把 /city/shanghai/restaurant/hotpot/detail/1001 改成 /shanghai/hotpot/1001 后,内页被蜘蛛抓取的速度快了不少,新内容上线后三天内基本都能看到收录。

判断“够不够扁”有个土办法:从根目录 / 开始数斜杠,到内容页为止。
✅ 推荐:/blog/ai-tools(2 个斜杠)
✅ 可接受:/news/2024/seo-tips(3 个斜杠)
❌ 超限:/2024/03/15/seo-tips(4 个斜杠)或 /category/tech/tools/seo/2024(5 个斜杠)

分类名不用写全称。/c/seo/category/search-engine-optimization 更轻快,爬虫也不需要读懂“category”这个词——它只关心你能多快把它带到目标页面。

连字符还是下划线?选错一个白干半年

Google 工程师 John Mueller 明确说过:- 是分词符,_ 不是。
所以 /seo-tools = “seo” + “tools”,而 /seo_tools = 一个叫 “seo_tools” 的词。中文站虽不直接受影响,但如果你的站点有出海打算,或者内容常被海外媒体引用,这点不能含糊。

中文 URL 怎么办?别拼音英文混搭,也别堆汉字。
/北京火锅推荐(中文 URL 在部分环境下解析异常)
/beijinghuoguo-2024(拼音太长,不易读)
/beijing-hotpot(短、准、国际通用)

再顺手检查一遍大小写。Linux 服务器认大小写,/Product/product 是两个页面。权重一分二,等于自己给自己挖坑。统一小写,一劳永逸。

URL 改完后,千万别忘了 301 重定向

很多人改完前端显示,就以为大功告成。结果旧链接没人管,404 一堆,之前积累的外链权重全作废。

必须补上 301:告诉搜索引擎,“这个页面搬新家了,以后请去那里找”。

比如把 /old?id=123 永久跳转到 /new-123
Apache(.htaccess):

RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^old$ /new-123? [R=301,L]

Nginx(server 区块):

location = /old {
    if ($args ~ "id=123") {
        return 301 /new-123;
    }
}

注意结尾的 ?,它会清掉原链接里的所有参数,避免跳过去还带着 ?id=123

改完后,立刻登录百度站长平台或 Google Search Console,在“网址检查”或“网站迁移”工具里提交新旧映射关系。别指望它自动发现——你得亲手推它一把。

把动态参数彻底锁死在后台:一个反直觉的检查清单

最坑的情况是:你前台看着 URL 干干净净,但爬虫顺着源码里的链接一扒,全是带问号的老路子。

动手前,先做这 5 件事:

  1. 查源码:右键 → “查看网页源代码”,Ctrl+F?。如果搜出 3 个以上带参数的链接,说明内部链接没同步更新。
  2. 看面包屑:很多 CMS 自动生成的导航链接仍是 /category?id=5,得手动替换成 /c/5/tech 这类静态路径。
  3. 翻分页/page/2 是好孩子,/list?page=2 是隐患。Rewrite 规则里记得加上分页支持。
  4. 试搜索框:输入关键词,看结果页 URL 是 /search/wordpress 还是 /search?q=wordpress。后者建议加 <meta name="robots" content="noindex">,别让搜索引擎浪费资源爬这些临时页。
  5. 点表单提交:比如留言成功后跳到 /contact?status=ok,这类页面容易被误索引。Nginx 可用 unset $args; 清参,Apache 加 ? 截断即可。

最后一步:用你日常就在用的工具扫一遍。比如 WordPress 用户装个 “Broken Link Checker”,或者直接用 Chrome 插件 “Link Miner”,导出全站链接列表,筛选出所有含 ? 的,逐个打钩处理。

今天就能执行的一个操作

打开你的 WordPress 后台(或其他 CMS),进「文章」列表,随便点开最近发布的 3 篇内容。
看浏览器地址栏:

  • 如果出现 ?&,或者 / 超过 3 个,
  • 就现在,打开你正在用的主机控制面板(比如宝塔、cPanel)或 FTP,找到 .htaccess(Apache)或 nginx.conf(Nginx),按文中的 Rewrite 示例,给这 3 篇内容各加一条重写规则。
  • 再补上对应的 301 重定向规则。
  • 改完立刻刷新页面测试,然后去百度站长平台的「URL 检查」里粘贴新链接,点“立即提交”。

不用等排期,不用写方案。就这 3 个页面,今天做完,明天就能看见变化。