您现在的位置: 首页网站前台技术>正文
SEO优化:仿地宝网URL伪静态版块目录化和贴子目录化
2012年01月24日 网站前台技术 暂无评论
在《百度搜索引擎优化指南》2.1.2 网站结构里提到,合理的网站结构应该是一个扁平的树型网状结构。而且大家都应该知道权重方面:二级域名>目录>静态页>动态页

那么什么是扁平的树型网状结构呢?
例如:首页:http://www.hackerfans.com
      栏目页:http://www.hackerfans.com/discuzx/
      内容页:http://www.hackerfans.com/discuzx/m826/
像这样的页面就是一个“扁平的树型网状结构”。每增加一个内容页,都会给栏目页增加一定的权重。像地宝网的URL就是很规范的,整站URL目录化,目录层次不超过2个。对于SEO是很有利的。

那么现在discuz官方的地址是怎么样的呢?
首页:http://www.discuz.net/forum.php
栏目页:http://www.discuz.net/forum-21-1.html
内容页http://www.discuz.net/thread-2281986-1-1.html
这样的URL是分散的,并不是网状结构,不利于权重的传递。

在这里魔客吧给大家提供一个方法,通过伪静态方法来实现discuzx的地址目录化(目前只支持Apache服务器)。

首先
打开source\function下的function_core.php
找到

    if($type == 'forum_forumdisplay') {
        list(,,, $fid, $page, $extra) = func_get_args();
        $r = array(
            '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
            '{page}' => $page ? $page : 1,
        );
    } elseif($type == 'forum_viewthread') {
        list(,,, $tid, $page, $prevpage, $extra) = func_get_args();
        $r = array(
            '{tid}' => $tid,
            '{page}' => $page ? $page : 1,
            '{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,
        );

改为

if($type == 'forum_forumdisplay') {
        list(,,, $fid, $page, $extra) = func_get_args();
        $r = array(
            '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
            '{page}' => $page ,
        );
    } elseif($type == 'forum_viewthread') {
        list(,,, $tid, $page, $prevpage, $extra) = func_get_args();
        $fid = DB::result_first("SELECT fid FROM ".DB::table('forum_thread')." WHERE tid = '$tid'");
        $r = array(
            '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
            '{tid}' => $tid,
            '{page}' => $page ,
            '{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,
        );

然后进入网站后吧->''seo设置"->"url静态化"
在"论坛主题列表页"的格式中填写:{fid}/{page}
在"论坛主题内容页"的格式中填写:{fid}/m{tid}/{page}

rewrite规则如下:
# 将 RewriteEngine 模式打开
RewriteEngine On

# 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
RewriteBase /

RewriteCond %{REQUEST_URI} !image/admincp/getcolor.htm$
RewriteRule ^(.*)\.htm$  - [F,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule .*/(.+).php$ $1.php?%1 [L,NC]

# Rewrite 系统规则请勿修改
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule topic-(.+)\.html$ portal.php?mod=topic&topic=$1&%1 [L,NC]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule article-([0-9]+)-([0-9]+)\.html$ portal.php?mod=view&aid=$1&page=$2&%1 [L,NC]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule forum-([0-9a-z_]+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1 [L,NC]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule thread-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2&%1 [L,NC]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2&%1 [L,NC]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2&%1 [L,NC]

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-z]+)-(.+)\.html$ $1.php?rewrite=$2&%1 [L,NC] 

## 目录化规则,保留前面的部分可以不影响已经被搜索引擎收录的页面  

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule m([0-9]+)(/([0-9]+))?(/)?$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$5&page=$3&%1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([0-9a-z_]+)(/([0-9]+))?(/)?$ forum.php?mod=forumdisplay&fid=$1&page=$3&%1 [L,NC]

然后工具,更新缓存,即实现了版块目录化,贴子目录化
在"论坛"-"版块管理"中的"绑定别名"即是版块目录名:
如: discuzx模板版块"绑定别名"为"discuzx",那么访问地址就是:http://www.hackerfans.com/discuzx/
原文地址:http://www.moke8.com/article-1597-1.html

 

给我留言