Discuz论坛SEO优化方案
Discuz论坛的SEO优化方案
设置discuz启用伪静态功能,使用5.0/5.5版GBK;
1.元,内容优化
2.内容页的网页副本。
3.robots.txt等的使用
更新
discuz5.5的Robots.txt问题
DZ禁止包含页帖的补充。
1.元优化
discuz的后台可以设置meta信息,甚至可以添加自己的头部信息,但是它的设置是针对所有页面的,并不被SEO认可所有页面都有相同的关键词和描述。
方案1: 3360删除元
修改表头模板文件templates/default/header.htm:删除meta的关键字和描述标签。
这两个标签作用不大,还有一些discuz带来的无用信息。如果用不好,会有不好的影响。所以,缺总比滥好。
方案2: 3360自定义元
这部分实现了内容页面关键词设置为帖子的标题,描述为内容的前100个字;还实现了每个版本的首页和列表页meta的单独设置(不同版本不一样,同一版本的列表页一样)。
1.修改标题模板文件templates\default\header.htm:将meta的关键字和描述标签更改为以下形式
meta name=' keywords ' content=' { $ meta keywords } $ SEO keywords '/
meta name=' description ' content=' $ SEO description '/
这里的$seokeywords和$seodescription是在后台设置的值。下面是如何自定义这个值;{$metakeywords}是奇虎的关键词,留待以后处理。
2.内容页(viewthread)将关键字设置为帖子的标题,描述是内容的前100个字。
2.1修改viewthread.php文件:
At包含模板(“view thread”);(更新:dz5.5到iinclude template($iscircle?supe site _ view thread ' : ' view thread ');在声明的顶部添加一行:
require_once DISCUZ_ROOT。/include/BMT . thread . Inc . PHP ';
2.2用以下内容创建include/bmt.thread.inc.php文件
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
如果(!defined(' IN _ DISCUZ '){ exit('拒绝访问');}
$ SEO keywords=strip _ tags($ thread[' subject ']);//将关键字设置为帖子的标题
//(: nethome已更新提问。当启用主题分类,允许按类别浏览时,原代码会有问题。所以加了标签过滤,本来是viewthread.php改进的,以后升级方便,不如放在这里。题目很短,不会影响效率)
$ SEO description=current($ postlist);//描述取文章内容的前100个字
$ SEO description=MB _ substr($ SEO description[' message '],0,100,' GB 2312 ');
$ SEO description=htmlspecialchars(strip _ tags($ SEO description));
?
*此处的数字和个别功能适用于GBK版本。
最后一行用来过滤内容中的html,否则会造成meta中的语法错误。首先,删除html标签,但是因为这里是前100个单词,所以有可能HTML标签被截断了,所以我们使用htmlspecialchars来转义它,可能会有一些垃圾邮件。
当然,你也可以在拦截之前使用strip_tags移除html标签,这样可能效率不高。
*所以你需要根据自己的情况修改这里的表述。
目前我用的是preg _ replace ('/[\ xa1-\ xff]/','',$ seodescription),也就是过滤汉字以外的内容,但是这样会丢失英文关键词。
否则这里的数据都是viewthread.php取的,不会有额外的数据库操作,只是字符串处理,不会导致效率。
3.在论坛显示上设置不同的关键字和描述。
3.1修改forumdisplay.php
文件,包含
ude 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);
}
相关文章
-
你认为按职称加工资好还是按工龄加工资好?
文章来源:老铁商城2020-01-06 -
月薪5万,要求你出国务工2年,中途不得回家,你愿意吗?
文章来源:老铁商城2020-01-06 -
公司派我去非洲工作,每天1000元补助,要不要去?
文章来源:老铁商城2020-01-06 -
是什么让你坚持上班没有离职呢?
文章来源:老铁商城2020-01-06 -
我已60岁,企业破产了,负债一千多万,怎样东山再起?
文章来源:老铁商城2020-01-06 -
如果腾讯、阿里、百度同时聘用你,你会选择哪一个公司?为什么?
文章来源:老铁商城2020-01-06 -
如果你痴迷钓鱼,每月给你10000块,钓遍全国的工作你愿意干吗?
文章来源:老铁商城2020-01-06