【SEO】确保 url 唯一,避免重复页面的办法

发表于2017-01-29   4601次阅读

对于 SEO ,确保页面 url 的唯一性非常重要。在搜索引擎来眼里,一个 url 就代表一个页面,如果你有多个 url 指向同一个页面,搜索引擎也会把他它们当做不同的页面进行抓取,这不仅浪费的搜索引擎的爬虫资源,而且由于页面内容相同,搜索引擎会当做重复页面,在你的内部页面之间会产生竞争,即使搜索引擎把这几个 url 全部收录了,这个页面的排名也不会理想。

图片来源wikimedia.org

下面我们举例来说明:

对于页面 a.html,有多个 tab(选项卡),不同 tab 对应的内容的在 html 源码中全部都有,只是通过不同的 url 参数来控制 tab 的默认显示:

如图:

三个 tab 的 url 分别是 :

http://www.example.com/a.html?tab=info
http://www.example.com/a.html?tab=about
http://www.example.com/a.html?tab=other

虽然这三个 url 都对应同一个页面,但对于搜索引擎来说,这属于三个页面,会重复抓取,即使收录了,也会造成你网站的有效量的降低,排名上不去。类似的情况还有很多,比如伪静态的网站,a.html 和 a.php 同样能访问,但有属于不同的 url ,在搜索引擎眼里就是重复页面。另外,对于域名也存在同样问题,www.example.com 和 example.com 是不同的域名,不要混淆。

解决办法如下

通过 rel="canonical" 指明首选链接

我们只保留 http://www.example.com/a.html 作为首选链接,将属性为 rel="canonical" 的 <link> 元素添加到这些网页的 <head> 部分,要使用绝对路径,如:

<link rel="canonical" href="http://www.example.com/a.html" />

Google 还支持通过 http 头信息方式来指定 canonical,以 php 代码举例:

<?php
    header('Link: <http://www.example.com/a.html>; rel="canonical"');
?>

使用 301 跳转

对于 a.php 和 a.html 或 www.example.com/a.html 和 example.com/a.html 都能访问的情况下,通过程序以 301 状态码跳转到 'www.example.com/a.html',至于为什么使用 301 而不是 302,看 google 的官方说明,如下:

来自 Google 的官方说明“您最好从这些网址中挑选一个作为首选(规范)目标网址,并使用 301 重定向将来自其他网址的流量发送到您的首选网址。服务器端 301 重定向是确保将用户和搜索引擎定向到正确网页的最佳方式。301 状态代码表示某网页已永久迁移至新位置。”

对于 http 和 https 并存的情况下,同样也要使用 301 跳转,对于搜索引擎来说,哪怕 url 上一个字母都不一样,也视为不同的 url。另外,如果你的网站及支持 http 又支持 https,建议跳转到 https 的地址,使用 https 搜索引擎会认为你的网站对用户更安全,会有更高的排名,对于这一点,百度和 Google 官方都有明确的说明,可以参看《百度开放收录https站点公告》

通过 robots.txt 协议文件进行屏蔽

比如你的网站只允许抓取静态或伪静态文件,则屏蔽所偶有动态脚本文件,例如:

Disallow: /*/*.php
Disallow: /*.php

使用 rel="nofollow".

业绩比较公认的说法,rel="nofollow"是用来避免分散页面权重,并不能有效屏蔽搜索引擎的抓取,对于已经声明为 nofollow 的链接,搜索引擎也会酌情抓取,出现这个问题的原因可能是国内搜索引擎对 nofollow 执行的并不严格。下面是 Google 的官方说明:

通常情况下,我们不会追踪这些链接。也就是说,Google不会传送这些链接中的PageRank或定位文字。从本质上说,使用nofollow会使我们放弃整个网络中相应的目标链接。不过,如果有未使用nofollow的其他网站链接指向这些目标网页,或目标网页的网址是通过站点地图提交给Google的,则这些目标网页可能仍会出现在我们的索引中。此外,值得注意的是,其他搜索引擎对nofollow的处理方式可能略有不同。

虽然 nofollow 不能严格屏蔽蜘蛛抓取,但可以降低链接的优先级,在一定程度上是可以缓解重复页面的抓取。

对于存在分页情况的列表页,如果分页太多,建议对非第一页的链接都加上 nofollow,避免分散太多权重,并切将非第一页的页面都用 canonical 元素指向第一页的地址。

使用 content="noindex" 禁止页面被索引

content="noindex" 可以禁止大多数搜索引擎屏不索引该 url 对应的页面,代码如:

<meta name="robots" content="noindex">

url 尽量简洁、参数要少

url 尽量简洁,越简洁,越不容易出现重复链接。参数要少,参数顺序也会影响 url 的重复性,比如这两个链接 www.example.com/detail.php?id=123&user_id=444 和 www.example.com/detail.php?user_id=444&id=123,虽然只是参数顺序不同,对于搜索引擎很可能会认为是两个不同的链接,所以最好还是通过伪静态化保证其顺序,以及唯一性,如 www.example.com/detail-123-444.html。

总结

只使用上面的一种方式未必有好效果,比如百度对 “canonical” 元素支持的就比较弱。所以,上面介绍的方案,能做到的尽量都做到。

扩展阅读: