本帖最后由 SEO小工 于 2009-5-8 12:40 编辑
有点乱了:见全面清晰的 discuz SEO
简单说,就是DZ同一篇帖子,却有好多不同的网址(URL),这让搜索引擎不知道显示哪个好,别人做了链接,权重也不能集中。
2月12号,google,yahoo,live宣布了一个新标签,后来ask.com也宣布支持,就是<link rel="canonical" href="canonical URL ">,可以指定一个首选的URL,会把链接及权重都转移到这个URL上。
我做的修改就是给DZ加上这个标签,让不管什么URL形式的帖子都会指向一个标准的URL上。
这是google中文官方的说明:http://www.googlechinawebmaster.com/2009/02/url.html
示例:http://www.yingsheng.net/
效果:帖子所有链接形式(viewthread.php带分页参数、打印参数等各种形式 和 archiver页)都加上标签,<linkrel="canonical" href="thread-23533-1-1.html" />
即设置thread-23533-1-1.html这种形式为首选,会把权重都转移给它,搜索结果中也显示它。
archiver下面的查原帖地址也改为 静态形式。
rediretc.php的动态形式 301到静态形式。
discuz的URL形式复杂,动态,打印页、精华参数,列表页参数变化,跳转形式,Archiver,再加上静态化形式,形成了多个副本内容,搜索引擎对也其按各自的技术选择了不同的首选URL。
使用301和robots控制可以解决一些问题,这次推出link新属性canonical 指定首选版本,某种程度上解决了discuz的网址规范化问题,消除了副本内容的影响(还要兼顾百度,它不支持canonical)
一,使用伪静态规范化discuz网址最简单
对于新站,开启伪静态,同时再做:
1.在robots.txt中禁止所有动态地址"Disallow: /*.php";
2.禁用Archiver,理由见Archiver搜索引擎优化的是是非非。
3.修改forumdisplay.php文件,将$extra = rawurlencode("page=$page$forumdisplayadd");改为$extra = rawurlencode("page=1$forumdisplayadd");
解释:帖子的URL形式是thread-(tid)-(page)-(forumdisplay page).html,最后一节表示此帖在列表页的第几页。所以当帖子越来越多,这个帖就会由第一页到第二页...,它的URL就会不断的变化。解决办法就是它都变成1。不足就是当从这个帖子返回列表页时,只能返回到第一页了。
这样处理站内链接形式单一、规范而且通畅,不影响收录。同时SE还没有收录其它形式,不会对已有收录产生么影响,也很少会有人链向非标准形式。
二,已收录各种形式URL 或 不支持伪静态
情况复杂,这时就用canonical tag指定权威链接的功能了,下面以viewthread.php?tid=888为规范版本说明如何添加link tag。
修改后,所有帖子页(包括redirect.php,静态化的或archiver)都含有link canonical标签,指定viewthread.php?tid=888这种形式为首选版本。当然下面的修中,你也可以稍做变化,指定thread-1-1-1.html为首选版本。
1.给viewthread.php加link rel="canonical"
修改viewthread.php文件,在$page = max($page, 1);上面(程序调用包含文件结束),加一行$extrahead .='<link rel="canonical" href="/viewthread.php?tid=" .$tid. '" />';
2.给打印页(有printable参数的)加canonical tag
修改打印页模板templates\default\viewthread_printable.htm文件,在<head>部分加 $extrahead 。
3.redirect.php形式的页子加权威链接
这个程序其实就是先进对参数处理,然后调用的是viewthread.php,所以,第一步改了,这个自然就有link rel="canonical"指向标准页面了。
4.为archiver页加link canonical标签
a)修archiver/index.php文件:在 global $boardurl, $_DCACHE, $charset, $navtitle, $headerbanner, $headernav; 行下加一行:global $extrahead;
在< http-equiv="Content-Type" content="text/html; charset={$charset}" />
行下加一行:$extrahead 。
b) 修改archiver\include\thread.inc.php:此文件中有两个showheader();,在第二个的上面加一行:$extrahead .='<link rel="canonical" href="/viewthread.php?tid=" .$tid. '" />';
三,既做伪静态又加link canonical到静态地址的说明
我认为做好上面两大点中的一点就可以了,但如果以伪静态形式为主,还做第二点,请注意下面:
1.将第二点中所有 $extrahead .='<link rel="canonical" href="viewthread.php?tid=' .$tid. '" />'; 换成$extrahead .='<link rel="canonical" href="thread-' .$tid. '-1-1.html" />'; 即改成以thread-3-1-1.html这种静态形式为首选版本。
2.将archiver内容页最下的完整版本链接改为静态形式
修改archiver/include/thread.inc.php,将 "viewthread.php?tid=$tid"替换为"thread-{$tid}-1-1.html"
3.为redirect.php页做301跳转到静态形式URL
修改文件,使用php代码实现301跳转,把require_once DISCUZ_ROOT.'./viewthread.php';替换为header("HTTP/1.1 301 Moved Permanently");
header( "Location: thread-{$tid}-1-1.html" );
文件中共有四个地方要替换,但在7.0的前台只看到了lastpost这个形式。
对于列表页,问题不大,且archiver列表未与正常列表对应,未做修改。
经常修改,如果有人要修改最好访问原文
原文链接:http://seo.banmutian.org/thread-13-1-1.html
作者:SEO小工,原发:seo技术版,转载请以链接形式注明作者、原始出处和本声明。谢谢。 |