做网站、写后台、搭CMS,很多人只盯着功能上线,却没留意生成的链接长啥样。比如一个商品页,本该是 /product/123,结果程序自动生成了 /index.php?m=product&a=detail&id=123&utm_source=wechat——这种带参数、带脚本名、还混着推广标记的URL,搜索引擎爬虫扫一遍就绕道走了。
链接太乱,爬虫根本不想存
百度、搜狗这些搜索引擎的爬虫每天要抓取几十亿页面,它不会在你网站上反复试错。如果首页点进去是 /news?id=567&cat=tech&v=2,点第二篇又变成 /article.php?nid=567&type=tech&ver=2,哪怕内容一模一样,爬虫也默认这是两个不同页面,甚至可能判为重复或低质。更糟的是,参数多、顺序不固定(比如 ?a=1&b=2 和 ?b=2&a=1),服务器返回相同内容,但URL不同,等于白白浪费抓取配额。
静态化不是玄学,是能立刻见效的操作
不少老系统用PHP+GET参数拼链接,改起来怕出错?其实不用大动干戈。Nginx加几行rewrite就行:
rewrite ^/article/([0-9]+)$ /article.php?id=$1 last;这样用户和搜索引擎看到的都是干净的 /article/892,后端照样走原来的逻辑。WordPress默认开启「朴素 permalink」时链接是 ?p=123,换成「文章名」模式后,收录速度明显快一截——不是因为算法偏爱中文,而是路径稳定、层级清晰、语义可读。
大小写、斜杠、末尾.html,差一点就变两页
有些程序导出链接时,偶尔多一个斜杠:/download/ vs /download;或者大小写混用:/FAQ.html 和 /faq.html。服务器若没设301跳转,这两个地址会被当成独立页面处理。曾经有客户用Hexo建站,主题配置里生成的归档页是 /archives/index.html,但导航菜单写成 /archives/,结果百度索引了两个几乎一样的页面,权重被稀释得厉害。
动态参数真不能用?也不是绝对
电商筛选页、搜索结果页确实绕不开参数。关键是要控制:只保留必要参数(比如 /list?cid=15&sort=price),去掉会变的(如 timestamp=171xxxx、session_id=abc123);再配合 rel="canonical" 告诉爬虫“以这个URL为准”。PHP里可以这样写:
<link rel="canonical" href="https://www.example.com/list?cid=15&sort=price">另外,robots.txt 里把带无意义参数的路径屏蔽掉,比如 Disallow: /*?*utm_、Disallow: /*?*session=,省得爬虫白忙活。