干海棠科技,致力于信息化生活的推广与普及的专业教学。
SEO尝试优化改进。
上一篇 /
下一篇 2007-07-24 20:33:02
/ 个人分类:干海棠维护日志
目前本站的SEO是非常差,而且由于以前曾经在国外的免费服务器上安置过半年,以致于PR值一直没有更新过来。不得已的情况下开始参照DZ论坛中的一个帖子进行SEO的优化,其实只是一些基本的改动,这些应该是DZ自己做的才对,居然要我们用户自己来搞。
从点石抄过来的。 然后我把需要改的都改了。打包发上来。 。 嘿嘿。 不过还有一个include/bmt.forum.inc.php 文件需要根据你自己论坛的情况自己修改。
下面是点石的帖子:
discuz!论坛基础优化实践(一) meta,content 优化引用:
discuz!论坛基础优化实践(一) meta,content 优化
-------- 声 明 -------- 1.作者:BMT,仅发表于点石论坛,转载请保留所有信息 2.初次接触SEO和PHP,错误之处请不吝赐教 3.感谢点石会员的支持,特别是国宝、zac、robin... 4.假设discuz已启用伪静态功能,使用5.0 GBK 版本
-------- 链 接 -------- discuz基础优化实践(一) meta,content 优化 discuz基础优化实践(二) 内容页的网页复制问题 discuz基础优化实践(三) robots.txt使用及其它
更新 discuz5.5的robots.txt问题 DZ 禁止一个版面帖子的收录的补充
中文搜索引擎对discuz收录存在的一些问题
------------------------
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" c /> <meta. name="description" c />
这里的$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)访问时,隐藏那些信息,当用户登录后是正常的,所以不影响使用。 这些信息主要指的是左侧用户信息栏、(资料 个人空间主页 短消息 等等)、用户的签名(隐藏后不怕签名的内容影响正文,链接也不起作用了) 以住相关文章
2.为标题加上<h1>标签 修改内容页模板文件 templates/default/viewthread.htm:将 <span class="bold">$post[subject]</span><br><br> 替换为 <h1>$post[subject]</h1>
<h1>还是很有用的。请根据您的需要自己调整下格式
-------- END --------
discuz基础优化实践(二) 内容页的网页复制问题引用:-------- 声 明 -------- 作者:BMT,仅发表于点石论坛,转载请保留所有信息 discuz基础优化实践(一) meta,content 优化 discuz基础优化实践(二) 内容页的网页复制问题 discuz基础优化实践(三) robots.txt使用及其它
以往对此问题的相关讨论
第一篇文章说了内容页本身的优化(meta,content)问题,这篇来解决内容页(viewthread)的网页复制问题
内容页伪静态URL不唯一
看看内容页的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" c />
2.分别修改 templates/default/nopermission.htm 和 templates/default/showmessage.htm 文件 将它们第一行的 {template header} 替换为 {template header_disbots}
虽然对meta. robots标签支持的不是很广泛,但这是比较省事的方法 因为是提示信息页,用301来实现的话,还要传给转到的页好多信息,修改起来比较麻烦
-------- END -------- discuz基础优化实践(三) robots.txt使用及其它引用:-------- 声 明 -------- 作者:BMT,仅发表于点石论坛,转载请保留所有信息 discuz基础优化实践(一) meta,content 优化 discuz基础优化实践(二) 内容页的网页复制问题 discuz基础优化实践(三) robots.txt使用及其它
以往对此问题的相关讨论
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.后台首页文件名为/(当然您也可以设置自己特定的)
Discuz的SEO到此就告一段落了。想想当初发现和解决这些问题还真花了不少力气呢,不过了解了discuz,了解了php,了解了seo,呵呵
欢迎各位提出意见和问题。
-------- END ----- |
参照上面的这位高手建议进行了SEO的优化,但redirect.php的优化会使论坛首页不能进入最新帖,也没有找到解决办法,目前只好把第二个require_once DISCUZ_ROOT.'./viewthread.php'; 不做替换操作〔大约在文件的101行左右〕。而且最后的首页URL优化方法是针对单一站点进行的,而本站由于论坛是在BBS目录中,不能使用这种方法进行优化,否则会造成全站的LOGO与BBS名称直接跳到站点首页上,这是一个目前不能解决的问题,等新首页制作成功后可以参考执行。
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
seo
改进
优化
站点