现在对于网站在搜索引擎上的表现开始多的关注起来,经常有事没事就查网站的收录,网站在seo上也开始暴露出来一些问题,其中就发现了一个问题:搜索引擎收录内容重复的页面,这一点在谷歌搜索上比较明显。
在观察了几个网站的收录情况后,我发现谷歌搜索对于页面收录的要求相较于百度搜索会低一点,也就是更加容易收录。对于一些不必要收录的页面,谷歌会收录。有关注过wordpress站点收录情况的小伙伴应该会发现,一些无意义的图片页谷歌会收录。而对于网站未对seo优化且url仅多出查询字符串部分的重复页面谷歌也同样会收录。
举个博客之前出现过的例子:
一个文章页面
http://www.felixlee.cn/post/18
与文章页点击回复某条评论后的页面
http://www.felixlee.cn/post/18?reply=10#comments
这两个链接中其实只要收录上面那个就好了,而有时候搜索引擎却会收录两个,且不说重复页面对页面权重分散的影响,在用户通过搜索引擎进入带有回复目标查询字符串和位置定位符的url的页面后,若在评论时未发现正在评论的内容是在回复某人时,就可能造成不必要的误解和麻烦。
告诉搜索引擎哪个页面才是最重要的是非常必要的,所以就引出这篇文章的重点“canonical”,有了canonical属性之后我们就可以告诉搜索引擎,到底哪一个页面才是最重要的那个,写法如下:
<link rel="canonical" href="http://www.felixlee.cn/post/18" />
而对于flask网站来说,由flask
中request
提供的base_url
属性就能非常简单地解决这个问题,它会删除查询字符串部分、位置标识符部分,只保留最基本的url部分,在flask中模板可以直接调用request对象,所以就不用在渲染模板的函数中传入参数,直接在模板中调用就可以了。
<link rel="canonical" href="{{ request.base_url }}" />
request是通过客户端的请求头构建的,如果你使用了nginx作为反向代理的话,就需要在nginx的配置文件上加上下面这一段用来传递客户端的请求头部,否则base_url
中的域名就会显示为项目的实际监听ip地址。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
这些就是我关于canonical的一些分享与实际flask项目的实现啦,这个问题在谷歌比较明显,在百度这种情况比较少见,在添加这个属性之后,谷歌那边还是很快就更新搜索结果了。还有一点建议就是可以在无需收录的入口链接上添加nofollow的属性,比如在回复的按钮上添加nofollow属性。以上就是我对于seo的一些浅显的认识,如果您发现了什么问题或者有什么建议欢迎在评论区留言,我们可以交流一下。