Discuz论坛的SEO优化方案

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

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标签改为如下形式

<meta name="keywords" content="{$metakeywords}$seokeywords" />
<meta name="description" content="$seodescription" />

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

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

2.1修改 viewthread.php 文件:
在 include template('viewthread'); (更新:dz5.5为iinclude template($iscircle ? 'supesite_viewthread' : 'viewthread'); ) 语句的上面加入一行:
require_once DISCUZ_ROOT.'./include/bmt.thread.inc.php';

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

<?php
if(!defined('IN_DISCUZ')) { exit('Access Denied'); }

$seokeywords = strip_tags($thread['subject']); //关键字设为帖子的标题
//(已更新: nethome 提出问题,当启用主题分类并允许按类别浏览时,原来代码会有问题。所以加了标签过滤,本来在viewthread.php中改更好,为以后升级方便,还是放在这里吧,subject很短,不会影响效率)

$seodescription = current( $postlist );//description取文章内容的前100字
$seodescription = mb_substr( $seodescription['message'],0,100,"gb2312" );
$seodescription = htmlspecialchars( strip_tags($seodescription) );
?>

*此处数字和个别函数适用于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

文件,在 include template('forumdisplay'); 语句上面添加
require_once DISCUZ_ROOT.'./include/bmt.forum.inc.php';

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

<?php
if(!defined('IN_DISCUZ')) { exit('Access Denied'); }
$seokeywords = $forum['name'];
$seodescription = $forum['description'];

switch ( $forum['fid'] ){
case 1: //此数字为版的ID号,不同版设置不同的meta
$seokeywords = 'key1,key2,...';
$seodescription = 'xxxx xxxx xxxx';
break;
case 2:
$seokeywords = 'key1,key2,...';
$seodescription = 'xxxx xxxx xxxx';
break;

}
?>

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

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

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

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

content的优化
discuz有个archiver,一是URL容易收录,二是页面比较干静,还有description会从正文中取内容,但archiver没有对内容中[b][url]之类的解析,那些标签起不到作用,原样显示还会增加垃圾信息。
本部分主要做两方面的优化,一是去除内容页的无用信息,二是给标题加上
<h1>
。加上伪静态和上篇meta的优化,效果就超过了archiver,因此可以在后台禁用它,还减少了复制网页。

实施方案

1.隐藏内容页(viewthread)中的无用信息:
修改内容页模板文件 templates/default/viewthread.htm:

用<!--{if $discuz_uid}--> <!--{/if}-->将要隐藏的信息包含起来。

准确的说是当游客(bots)访问时,隐藏那些信息,当用户登录后是正常的,所以不影响使用。
这些信息主要指的是左侧用户信息栏、(资料 个人空间 主页 短消息 等等)、用户的签名(隐藏后不怕签名的内容影响正文,链接也不起作用了:P)
以住相关文章

2.为标题加上
<h1>
标签
修改内容页模板文件 templates/default/viewthread.htm:

将 <span class="bold">$post[subject]</span><br><br> 替换为
<h1>$post[subject]</h1>

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

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

'post_edit' => '\n\n[[i]] 本帖最后由 $editor 于 $edittime 编辑 [/i]]',
'post_edit_regexp' => '/\n{2}\[\[i\] 本帖最后由 .*? 于 .*? 编辑 \[\/i\]\]$/s',

比如我改成 [ 网站名 URL xxx 于 xxxx 编辑]。改程序无聊时的自娱,呵呵
注意上下两个表达式要匹配。为了防止解析方括号是全角,不要复制后在文件中查找。

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

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

解决方法
修改 forumdisplay.php 文件:

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

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

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

redirect的301重定向

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

解决方法
修改 redirect.php 文件:

将前两个 require_once DISCUZ_ROOT.'./viewthread.php'; 语句替换为
$bmt_url='Location:/thread-'.$tid.'-'.$page.'-1.html';
header('HTTP/1.1 301 Moved Permanently');
header( $bmt_url );
将后两个 require_once DISCUZ_ROOT.'./viewthread.php'; 语句替换为
$bmt_url='Location:/thread-'.$tid.'-1-1.html';
header('HTTP/1.1 301 Moved Permanently');
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('HTTP/1.1 301 Moved Permanently');
header( $bmt_url );

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

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

提示信息页的网页复制

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

解决方法
1.创建另一个头模板文件 templates/default/header_disbots.htm
内容同 header.htm 文件,但加入meta robot标签,如下

<meta name="robots" content="noindex,nofollow" />

2.分别修改 templates/default/nopermission.htm 和 templates/default/showmessage.htm 文件
将它们第一行的 {template header} 替换为 {template header_disbots}

虽然对meta robots标签支持的不是很广泛,但这是比较省事的方法
因为是提示信息页,用301来实现的话,还要传给转到的页好多信息,修改起来比较麻烦

三、robots.txt使用

User-agent: *

#禁止一个版面的收录
#如果有个水版,不想禁止游客权限,也不想SE收录,已免影响网站质量,可以用如下方法
Disallow: /forum-1-

#数字即为要禁止版块的ID。
#注意数字最后的 - 不要省略,否则连ID为11,12等1开头的版都禁了
[更新]补充方法:再给内容页加meta robot禁止

#再禁网页复制
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.txt end ------
[更新]dz5.5的robots.txt后部分给出的Disallow: post.php等是不合规范的,一定要在前面加上"/"。>>详细说明

首页URL问题

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

1.进入后台,基本设置->首面文件名 设置为: /
2.修改文件 member.php 将 header("Location: {$boardurl}".$indexname); 替换为

if( $indexname=='/'){
header("Location: {$boardurl}");
}else{
header("Location: {$boardurl}".$indexname);
}

[更新]dz5.5为dheader

此修改处的功能是清除cookies后返回到首页,如不修改域名后就有两个/。暂时未发现使用/当首页文件名的其它问题

结 束

除了文件的修改,有些地方要配合后台设置,前面都提到了,这里总结一下。主要有:1.URL静态化,只启用普通页面静态化就可以了;2.不要启用 Archiver功能;3.后台的keywords和description设置只是针对首页的(如果您没做列表页和内容页的meta修改则也应用到它们);4.后台首页文件名为/(当然您也可以设置自己特定的)

时间: 2024-09-17 04:54:50

Discuz论坛的SEO优化方案的相关文章

个人经验总结seo优化方案的七个关键点

一:网站的定位 网站的定位主要指我们要根据我们做的行业来做好前期的规划,例如:我们是应该选择怎样竞争度的关键词?选择的盈利模式是怎样的? 关键词的挖掘 指我们在网站建设前期挖掘大量的关键词,然后进行针对性的筛选,从筛选中的来确定好早期的目标关键词和长尾关键词,我们在选择目标关键词和长尾关键词的时候一定要考虑两个重要因素. (1).关键词的转化率 (2).关键词的流量我们要选择的关键词一定是要这两个因素都能够达到综合要求才行. 我们根据这2个要求来选择我们的要做的目标关键词和长尾关键词. 盈利模式

干货:一个网站完整详细的SEO优化方案

根据自己的个人经验完成了这篇文章,希望对SEOer有点帮助,高手直接跳过,请勿喷水...一个完整的SEO优化方案主要由四个小组组成:一.前端/页编人员二.内容编辑人员三.推广人员四.数据分析人员接下来,我们就对这四个小组分配工作.首先,前端/页编人员主要负责站内优化,主要从四个方面入手:第一个,站内结构优化合理规划站点结构(1.扁平化结构 2.辅助导航.面包屑导航.次导航)内容页结构设置(最新文章.推荐文章.热门文章.增加相关性.方便自助根据链接抓取更多内容)较快的加载速度简洁的页面结构第二个,

SEO优化方案,怎样为一个网站制定一个SEO优化方案?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 每一个网站的建立起来之前,我们做站长的就应该为接下来要打理的网站一个整体的SEO优化方案.很多SEO的新手都一直互相复制一些不实用的方法,他们认为SEO就是坚持每天发文章,多发外链,他们整天就去逛论坛交换友情链接.但是最终自己的网站如何发展他们是不会清楚的.那真正为一个网站做SEO优化需要怎么做呢?接下来彭健会为大家介绍一下要怎么为网站做SE

通过5W2H分析法做SEO优化方案

SEO优化方案,个人站长倒是无所谓,但是对于参加SEO工作或者是SEO接单来说,SEO优化方案它是比不可少的,那么我们怎样书写SEO优化方案呢?这里本人给大家分享5W2H方法来写方案. 什么是5W2H,它是二战中美国陆军兵器修理部首创的一种方法,现广泛应用于企业管理中,具体含义为: WHAT:做什么?目的是什么?我们做SEO优化方案首先就应该确定我们要做什么.提升关键字排名?解决网站降权问题?网站推广?关键词排名达到什么样的程度?等等,做事情之前我们要知道我们做什么,目的是什么?这也是最基本的,

经验分享:SEO优化方案书怎么写

现在很多SEOer进入一个公司的第一件事就是熟悉公司,第二步恐怕就要写优化方案了吧,下面是我进入公司写的SEO方案.如果你是老鸟就一飘而过吧,希望对新手有一定的帮助. 金富网站SEO优化方案 一.网站基本信息 1.搜索引擎收录情况 分析:各大搜索引擎收录良好,快照较慢,解决办法:每天更新网站,发布产品信息或者新闻信息. 2.网站权重及流量分析 网站百度权重截图: 百度首页暂时没有搜索量较高的关键词. 网站流量截图: 网站自开通统计以来,历史最高IP为30,每日平均13,还有待提升. 二.网站优化

浅谈网站SEO优化方案的写作方法(一)

做网站SEO优化写方案很重要,不论是自己网站做seo,还是seo接单帮别人做优化,写一份可行性好的SEO优化方案都是有必要的.那么网站SEO方案该怎么写呢?要注意哪些问题呢?看下文. 现有网站SEO方案写法: 1.首页关键词诊断,现有网站SEO诊断 关键词是一个网站seo优化的重点,从网站的用途来重新审视网站的关键词是做好SEO网站优化方案的基础. 2.网站目录的seo诊断 目录是网站的重要内链组成部分,目录的合理设置是决定网站SEO优化成功的关键. 3.网站目录外的内部链接诊断 内部链接是网站

惠州SEO博客的网站SEO优化方案

下面是叶剑辉对惠州SEO博客写的一份网站SEO优化方案,供各位朋友在制定相关网站SEO优化方案时作参考! 一.网站定位 惠州SEO博客(http://www.huizhouseo.cn/)是一个个人的SEO博客,是惠州SEO叶剑辉用于关注网站SEO与网站运营,并通过其进行网站SEO优化实践与网站运营策划研究. 目标与思路:惠州SEO博客通过各种手段的进行推广,并对网站关键词进行优化,从而带来流量,达到自我实践并自我推广的效果. 确定关键词 由于惠州SEO博客是一个个人的SEO博客,其更多的关注与

浅谈网站SEO优化方案的写作方法(二)

前段时间写了SEO优化方案一,从一些基本SEO优化的方面列举了SEO优化方案的写法.随着SEO市场的发展,简单的SEO方案已经没有竞争力,只有通过探索,写出有创意,执行性高的优化方案,才能在SEO工作和市场竞争中取得胜利,那怎样写出有竞争力的SEO优化方案呢?本文主要从以下五个方面来回答这个问题. 1.从全局出发,布局SEO优化执行方法 写方案,最终能否顺利的执行是最关键的一点.通过对网站,网站价值,网站浏览者的调查了解,整合有必要的SEO优化资源,通过对资源整体的合理布局,不仅能在以后的方案执

个人总结:如何订制SEO优化方案

在SEO这一行也有三年时间,自己也做方案的心得,不过,有很细节需要我们注意.北京旅行社如下:个人经验总结seo优化方案的七个关键点分享. 一:网站的定位 网站的定位主要指我们要根据我们做的行业来做好前期的规划,例如:我们是应该选择怎样竞争度的关键词?选择的盈利模式是怎样的? 关键词的挖掘 指我们在网站建设前期挖掘大量的关键词,然后进行针对性的筛选,从筛选中的来确定好早期的目标关键词和长尾关键词,我们在选择目标关键词和长尾关键词的时候一定要考虑两个重要因素. (1).关键词的转化率 (2).关键词