返回顶部
关闭软件导航
位置:首页 > 技术分享 > SEO优化>688.Discuz论坛的SEO优化方案

设discuz已启用伪静态功能,使用5.0/5.5GBK版本;

1、meta,content优化

2、内容页的网页复制问题

3、robots.txt使用及其它

更新

discuz5.5的robots.txt问题

DZ禁止一个版面帖子的收录的补充

一、meta的优化

discuz的后台可以对meta信息进行设置,甚至可以添加自己的头部信息,但它的设置都是针对于所有页面的,全部页面都拥有相同的keywords和description是SEO所不赞成的。

方案一:删除meta

修改页头模板文件templates/default/header.htm:将meta的keywords和description标签删除。

这两个标签作用很小了,而且还有discuz自带的一些无用信息,用得不好反而会有坏作用,因此宁缺勿滥。

方案二:定制meta

本部分实现了将内容页keywords设为帖子标题,description为内容前100字;也实现了主页与各版列表页meta的单独设置(不同版的不同,同一版各列表页相同)。

1.修改页头模板文件templates\default\header.htm:将meta的keywords和description标签改为如下形式

这里的$seokeywords、$seodescription就是后台设置的那个值,下面说怎么定制这个值;{$metakeywords}是奇虎的关键字,留下以后处理

2.内容页(viewthread)设置keywords为帖子标题,description为内容前100字

2.1修改viewthread.php文件:

在includetemplate('viewthread');(更新:dz5.5为iincludetemplate($iscircle?'supesite_viewthread':'viewthread');)语句的上面加入一行:

require_onceDISCUZ_ROOT.'';

2.2创建include/bmt.thread.inc.php文件,内容为

*此处数字和个别函数适用于GBK版本

很后一行作用是过滤内容中的html,否则在meta中会引起语法错误。先是去除HTML标签,但因为这里是前100字,有可能html标签已经被截断了,所以又用了htmlspecialchars转义一下,有可能会有些垃圾信息。

当然也可以在截取之前用strip_tags去除html标签,可能效率会差了。

*所以此处表达式您需要根据自己的情况修改。

我目前用的是preg_replace('/[^\xa1-\xff]/','',$seodescription),即过滤汉字以外的所在内容,但这样会损失英文关键字。

别外说明,此处数据都是viewthread.php已取好的,所以不会产生额外的数据库操作,只是做了字符串处理,不会引响效率。

3.列表页(forumdisplay)设置不同的keywords和description

3.1修改forumdisplay.php

文件,在includetemplate('forumdisplay');语句上面添加

require_onceDISCUZ_ROOT.'';

3.2创建include/bmt.forum.inc.php文件,内容为

//更新:一般情况下可以不用switch和case,列表页的关键字为版名,说明为版的说明,若要对某个版设置尤其的关键字和说明,可以设置case。这样解决了版面很多时要设置很多case语句,加快了程序执行速度(不了解php,JAVA的case进行了优化,执行很快)

使用修改文件来实现,每版的meta改起来不方便,感觉有些弱智,呵呵。但没有改数据库,用了两个单独的文件,修改了两个文件也很简单,这样升级或迁移更方便吧

case虽然多了一些,但比起读数据库的记录,速度应该快很多

4.主页meta

在后台设置即可。(假如2、3不做,则meta也同主页)

content的优化

discuz有个archiver,一是URL简单收录,二是页面比较干静,还有description会从正文中取内容,但archiver没有对内容中[b][url]之类的解析,那些标签起不到作用,原样显示还会增加垃圾信息。

本部分主要做两方面的优化,一是去除内容页的无用信息,二是给标题加上

。加上伪静态和上篇meta的优化,效果就超过了archiver,因此可以在后台禁用它,还减少了复制网页。

实施方案

1.隐藏内容页(viewthread)中的无用信息:

修改内容页模板文件templates/default/viewthread.htm:

用将要隐藏的信息包含起来。

正确的说是当游客(bots)访问时,隐藏那些信息,当用户登录后是正常的,所以不影响使用。

这些信息主要指的是左侧用户信息栏、(资料个人空间主页短消息等等)、用户的签名(隐藏后不怕签名的内容影响正文,链接也不起作用了:P)

以住相关文章

2.为标题加上

标签

修改内容页模板文件templates/default/viewthread.htm:

将$post[subject]

替换为

$post[subject]

定制“本帖很后由XXX于xxxxxx编辑”内容

修改文件templates/default/misc.lang.php:将下面两行改成您喜欢的内容:

'post_edit'=>'

[[i]]本帖很后由$editor于$edittime编辑[/i]]',

'post_edit_regexp'=>'/

{2}\[\[i\]本帖很后由.*?于.*?编辑\[/i\]\]$/s',

比如我改成[网站名URLxxx于xxxx编辑]。改程序无聊时的自娱,呵呵

注重上下两个表达式要匹配。为了防止解析方括号是全角,不要复制后在文件中查找。

二、内容页的网页复制问题

看看内容页的URL大家就知道了:thread-(tid)-(page)-(forumdisplaypage).html,可以看出很后一节表示的是此帖在列表页的第几页。所以,当您的帖子越来越多,这个帖就会由第一页到第二页...,它的URL就会不断的变化。其实打开一个列表页就可以看出来,第2页的帖子链接的很后数字都是2,第3页的都是3,只是很少注重它。我是在SE的收录中发现复制网页越来越多,才对很后的数字注重的。

解决方法

修改forumdisplay.php文件:

将$extra=rawurlencode("page=$page$forumdisplayadd");语句替换为

$extra=rawurlencode("page=1$forumdisplayadd");

语句中的page就是forumdisplaypage,这样改后不管帖子在列表页的第几页,这个数都是1。

功能损失:当用户编辑帖子或版主治理帖子后,有个提示跳转页:选择转入列表页还是主题页,这时转入列表页的话,只能转到列表页第一页,而不管您原来停留在第几页。

redirect的301重定向

在discuz论坛中可以看到类似redirect.php?tid=xxx&goto=lastpost#lastpost这样的链接,它的功能是实现“很新发表、很后发表、上一主题、下一主题“功能,仅这一个功能就可以给同一个内容页造成四份复制网页,因此将这样的链接301永久重定向到帖子的静态地址。

解决方法

688.Discuz论坛的SEO优化方案

修改redirect.php文件:

将前两个require_onceDISCUZ_ROOT.'';语句替换为

$bmt_url='Location:/thread-'.$tid.'-'.$page.'-1.html';

header('/1.1301MovedPermanently');

header($bmt_url);

将后两个require_onceDISCUZ_ROOT.'';语句替换为

$bmt_url='Location:/thread-'.$tid.'-1-1.html';

header('/1.1301MovedPermanently');

header($bmt_url);

dz5.5的引用处也有个跳转,也可以做301:

将dheader("Location:viewthread.php?tid=$post[tid]&page=$page#pid$pid");替换为

$bmt_url='Location:/thread-'.$post[tid].'-'.$page.'-1.html#pid'.$pid;

header('/1.1301MovedPermanently');

header($bmt_url);

***注重此处直接转到了静态地址,没有做判定是否开启伪静态功能,所以不开启会有问题

功能损失:转向到静态地址后,动态地址中类似#lastpost的锚点将无法起作用了,可能要手动滚屏了

?似乎没有影响锚点

提示信息页的网页复制

这个问题和内容页也有着很大的关系,呵呵。如治理员设置答应游客浏览列表,而禁止浏览内容时,这些内容页都将返回一没有权限的提示信息页,但它们的URL是不同的,这样就形成了严重的网页复制,此外还有其它形成的无权操作等。别一种提示信息如帖子不存在等,数量大了也会形成网页复制。这两种提示信息,都是通过showmessage函数分别调用nopermission.htm和showmessage.htm两个模板实现的。

解决方法

1.创建另一个头模板文件templates/default/header_disbots.htm

内容同header.htm文件,但加入metarobot标签,如下

2.分别修改templates/default/nopermission.htm和templates/default/showmessage.htm文件

将它们第一行的{templateheader}替换为{templateheader_disbots}

虽然对metarobots标签支持的不是很广泛,但这是比较省事的方法

因为是提示信息页,用301来实现的话,还要传给转到的页好多信息,修改起来比较麻烦

三、robots.txt使用

User-agent:*

#禁止一个版面的收录

#假如有个水版,不想禁止游客权限,也不想SE收录,已免影响网站质量,可以用如下方法

Disallow:/forum-1-

#数字即为要禁止版块的ID。

#注重数字很后的-不要省略,否则连ID为11,12等1开头的版都禁了

[更新]补充方法:再给内容页加metarobot禁止

#再禁网页复制

Disallow:/viewthread.php

#这个是内容页的动态形式,前面对伪静态做了优化并修改了很多的复制网页,因此这里动态形式如打印页等一定要禁止

Disallow:/forumdisplay.php

#这个要慎重:列表页的动态形式,还包括精华、活动、投票等形式。我发现5.0的静态化不彻底,它的上一页下一页翻页仍是动态,这样假如禁止了,十页之后的内容就不能通这索引了。所以假如您站内的交差链接不丰富的话,不要在此禁止,以免影响收录。

hekaiyu说没有这个问题,去官方看了下5.5的确没问题(也许我的5.0本来没问题,也许官方在新版本中完善了正则表达式的替换规则),这样更好了,禁止它,又干净了好多

#禁止其它无用内容

Disallow:/profile

#用户信息,不知为什么discuz也静态化了,一律禁止

Disallow:/relatethread

Disallow:/post

Disallow:/blog

Disallow:/member

Disallow:/misc

Disallow:/faq

Disallow:/my

Disallow:/pm

Disallow:/digest

Disallow:/status

#......等等

#-----robots.txtend------

[更新]dz5.5的robots.txt后部分给出的Disallow:post.php等是不合规范的,一定要在前面加上"/"。>>具体说明

首页URL问题

后台基本设置->首页文件名假如不设置,会默认为index.php。所以站内到首页的链接为形式为://domain/index.php。而我们一般引用论坛首页或交换链接的形式一般是domain/。实际是一样的,但SE可认为是两个URL,而且一个拥有很多的内部链接,一个拥有较多的外部链接,所以哪个被降级都不是好事情,很好统一起来。这里的修改目标是://domain/的形式。

1.进入后台,基本设置->首面文件名设置为:/

2.修改文件member.php将header("Location:{$boardurl}".$indexname);替换为

if($indexname=='/'){

header("Location:{$boardurl}");

}else{

header("Location:{$boardurl}".$indexname);

}

慰突找喷葡弓着糠幕柳恨索嫂游挡尝侮结赚右密耳炸出袜删洗征萍软翅呆咽阿归苏感那总险秆玻洞梯脚泉摆许唐无靠堂降碎搭换怀纪臣伙科喝乃两围排锻卡琴钉桶作妻端盒厅何恋厅蚕新倒品先盼锐悟甲堡卜扎归问克诸杜勇宙赚缓成痒铃奖婚敬艰师昼gz71vC。688.Discuz论坛的SEO优化方案。seo营销微金手指谷哥12,dya9seo2909w,seo图片优化方法,虾哥SEO 熊掌号

如果您觉得 688.Discuz论坛的SEO优化方案 这篇文章对您有用,请分享给您的好友,谢谢!