以雅酷网为实例从技术上说说dedecms的seo优化要注意哪些?

作者mazerain 文章分类 分类:dedecms(织梦) 文章评论 0条评论 阅读次数 已被围观 2347

转自(郭黑黑织梦博客 http://www.guoxiongjie.com

      目前在做雅酷网 ,雅酷卡是雅酷时空公司的产品,我个人感觉用雅酷卡消费还是比较实惠的,而雅酷卡的特色便是雅酷健身卡,很多站长成天的趴电脑上,可以考虑办一张这样的卡,在周末的时候去健身中心活动活动,还是比较不错的选择。 雅酷网是在dedecms的基础上开发的,虽然dedecms的文章系统比较棒,但是我们还需要一个商户的模型,而且对于数据处理方面,需求量比较大,于是我们对dedecms的数据库做了一些优化,尤其是对主表dede_archives做了分表,然后继续开发了一套关键词词库系统,商户自动采集系统和文章自动采集系统,你目前在http://www.yacol.net上看到的很多商户、文章,基本上都是靠这些采集系统来完成的,这些程序目前还不便于公开,以后可能会公布出来。今天以雅酷网为实例,从技术上讲讲我们在用Dedecms建站中都会注意些什么。希望对大家有一些帮助。

一、网站结构要清晰

我最烦那种能让人迷路的网站,所以我做网站之前都要先搞清楚网站需要什么功能,有什么栏目规划,每一个栏目是单页还是列表,大概需要几个页面,这些最基本的问题。网站的结构主要有网站树状结构、扁平状结构这两种。

1、网站树状结构:在网站的根目录下存在很多个网站的子频道(二级目录)、每个频道下都有自己的页面或内容。树状结构清晰的显示出网站的内容框架,方便搜索引擎对网站内容的抓取,树状结构适合中大型网站。

例如树状结构的网站频道:
http://www.yacol.net/baike/
http://www.yacol.net/shanghu/
http://www.yacol.net/card/

频道下又有属于其的页面:
http://www.yacol.net/baike/ydjs/
http://www.yacol.net/baike/ylxx/
http://www.yacol.net/baike/shfw/
http://www.yacol.net/baike/mrmt/

2、网站扁平结构:网站所有的页面都存在于根目录下,也可以说是域名下。扁平结构适用于中小型网站,例如博客、企业站等。树状结构适合于中大型网站使用!

例如扁平结构的网站:
www.yacol.net/a.html
www.yacol.net/b.html
www.yacol.net/c.html
www.yacol.net/d.html
www.yacol.net/e.html
www.yacol.net/f.html

对于雅酷网,我采用了比较常用的的树状结构,因为我个人一直比较偏向于树状结构,感觉这种结构比较清晰明了,用户容易理解。至于扁平结构我只用过一次,就是在陈海阳律师团队http://www.chenhaiyang.org里,因为那个站数据量太大,而dedecms在数据承载能力上还不够强悍,所以把那个站采用了伪静态。

列表页诸如 http://www.chenhaiyang.org/list31/
文章页诸如 http://www.chenhaiyang.org/view18/

二、网站路径的优化

Dedecms的文档HTML默认保存路径是放在跟目录的“a/”下面,我们在后台的“系统设置”→“系统基本参数”中可以将文档HTML默认保存路径改为了根目录下。直接一个“/”就可以了。默认的内容页面的路径应该是这样的:http://网站域名/a/webbase/dreamweaver/2010/0407/57.html,这样的URL层级太深了对SEO不利,我们需要修改下,我一般是修改成:http://网站域名/栏目名称/文章ID/,比如:http://www.yacol.net/baike/gongyuan/17279/。在添加或修改栏目的的面板中将文章命名规则修改为:{typedir}/{aid}/index.html就可以,去掉了{Y}/{M}{D}/(这个是显示:年/月日)。如果你的栏目层级本来就很深的话,比如我这里百科栏目下还细分了公园等子栏目,建议你可以把文章页面都放在一个目录下,则定类似为:baike/{aid}/index.html。这个规则都是可以自定义的,你觉得怎么对seo有利就怎么来吧。对于最先批量或者单个加栏目的时候,可能对于这里老是要一个个的去修改文章路径很不爽,其实有简单的方法可以处理:
打开/dede/templets/catalog_add.htm ,找到“文章命名规则”,把后面的

<input name="namerule" type="text" id="namerule" value="<?php echo $cfg_df_namerule;?>" class="pubinputs" style="width:250px" />

改为

<input name="namerule" type="text" id="namerule" value="{typedir}/{aid}/index.html" class="pubinputs" style="width:250px" />

或者打开/include/common.inc.php,找到“文档的默认命名规则”,把后面的

$art_shortname = $cfg_df_ext = '.html';
$cfg_df_namerule = '{typedir}/{Y}/{M}{D}/{aid}'.$cfg_df_ext;

改为

$art_shortname = $cfg_df_ext = '.html';
$cfg_df_namerule = '{typedir}/{aid}/index'.$cfg_df_ext;

如果是需要批量加栏目的话,则打开/dede/templets/catalog_add_quick.htm ,找到“文章命名规则”,把后面的

<input name="namerule" type="text" id="namerule" value="{typedir}/{Y}{M}{D}/{aid}.html" size="40" class="pubinputs" />

改为

<input name="namerule" type="text" id="namerule" value="{typedir}/{aid}/index.html" size="40" class="pubinputs" />

三、网页TITLE标签的修改

据说现在百度基本上都不看keyword了(当然我们不能不写),但是现在的关键在于网页上的title。所以一定要把title好好做做。主要是涉及到一个如何实现"三级栏目_二级栏目_一级栏目_网站名称"的问题。雅酷网的title基本上是这样做的:

首页:

<title>{dede:global.cfg_webname/}</title>,在“系统设置”→“系统基本参数”中将首页的标题信息都写在网站名称里面。

栏目页:

找到include/typelink.class.php第164行左右,找到

$this->valuePositionName = $tinfos['typename'].$this->SplitSymbol.$this->valuePositionName;

修改为:

$this->valuePositionName = $this->valuePositionName.$this->SplitSymbol.$tinfos['typename'];

接下来将列表页模板上默认的标题标签

<title>{dede:field.title/} - {dede:global.cfg_webname/}</title>

修改为:

<title><title>{dede:field.seotitle /} {dede:field.title function='ereg_replace(" - "," - ",@me)'/} - {dede:global.cfg_webname/}</title>

即可。

第一个标签{dede:field.seotitle /} 是调用栏目的SEO标题。如果您对栏目中间的连接符不满意,可以修改include/arc.listview.class.php,找到55行

$this->Fields['title'] = ereg_replace("[<>]"," / ",$this->TypeLink->GetPositionLink(false));

把 / 删除 注意留一个空格 " "

文章页:

<title>{dede:field.seotitle/} {dede:field name='title'/}-{dede:field name='position' runphp='yes'}

$tc="-"; //分隔符

$tw=$GLOBALS['cfg_list_symbol']; //调用位置分隔符

@me=html2text(@me); //去除html标签

$tf=split($tw,@me); //分解成数组

for($ta=(count($tf)-2);$ta>=1;$ta--){ //循环赋值给$tk

$tk.=trim($tf[$ta]).$tc;

}

$tk=substr($tk,0,-1);

@me=$tk; //赋值给@me

{/dede:field}-{dede:global name='cfg_webname'/}</title>

效果:实现"三级栏目_二级栏目_一级栏目_网站名称"。其中简略标题{dede:field.seotitle/}用来做什么呢,没错---长尾关键词。

四、完美的内链建设

网站自动给关键字加上链接:这个功能很爽,可以预先设定一些你网站的关键词和对应的链接,以后每次加文章的时候都自动给锚文本加上链接,其实这个就是一个替换的功能。之前有在我的博客讲过如何做好dedecms的内链建设 (http://www.guoxiongjie.com/web/95/),现在再重复一遍:

1、后台>系统>系统基本参数>核心设置>关键字替换(是/否),这里选择“是”。

2、后台>系统>系统基本参数>其他选项>文档内容同一关键词替换次数(0为全部替换): 1

3、后台>采集>文档关键词维护, 在这里面设置关键词以及指向网址的链接。

但是这里有个问题,这个只是在添加文章时,在 关键字: 一栏里填写的关键字才有链接,而文章里出现的其他"文档关键字"是不会被加上链接的。怎么才能让其他关键字也被加上链接呢?

打开/include/arc.archives.class.php,找到

foreach($kws as $k)
{
$k = trim($k);
if($k!="")
{
if($i > $maxkey)
{
break;
}
$myrow = $this->dsql->GetOne("select * from dede_keywords where keyword='$k' And rpurl<>'' ");
if(is_array($myrow))
{
$karr[] = $k;
$GLOBALS['replaced'][$k] = 0;
$kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
}
$i++;
}
}

替换成:

$dsql = new DedeSql(false);
$query="select * from dede_keywords where rpurl<>'' ";
$dsql->SetQuery($query);
$dsql->Execute();
while($row = $dsql->GetArray())
{
$key = trim($row['keyword']);
$rul=trim($row['rpurl']);
if($rul!="")
if(!in_array($key, $kw))
if(!in_array($kw,$key))
if(substr_count($body,$key)<10)
{
$karr[] = $key;
$kaarr[] = "<a href='$rul'><u>$key</u></a>";
}
}

修改之后,在后台的“核心”→“批量维护 ”→“文档关键词维护 ”,比如雅酷网中,我可以新增关键字:运动;链接网址:http://www.yacol.net/ydjs/jianshen/。要注意的是,在设置关键词的时候,尽量不要用那些宽泛的词,比如运动这个词。我给“运动健身”这个词加了链接,要是“运动”再加一个链接的话,那么就乱了。所以我们尽量的不要使用太宽泛的词,避免重复。实例可以看这个页面http://www.yacol.net/baike/yujia/17205/

另外在文章页上,还可以加上相关文章来提高文章相关关键词的密度。相关文章的调用代码是:

{dede:likearticle row='10' titlelen='4' eregtype=all|tag|keyword}
<li><a href="field:arcurl/]"_fcksavedurl=""field:arcurl/]" target="_blank">·[field:title/]</a></li>
{/dede:likearticle}

还可以在文章正文头部调用该文章的tags,调用标签是 {dede:field.tags/} ,但是dedecms的默认在文章调用该文章的tags是不带链接的,这里介绍一种让tag自动带链接的方法(http://www.guoxiongjie.com/web/83/)(只需要按照下面方法修改,文章模板页上的tags调用标签不用变):

打开include/common.func.php ,大约755行,找到

//获得某文档的所有tag
function GetTags($aid)
{
global $dsql;
$tags = '';
$query = "Select tag From `dede_taglist` where aid='$aid' ";
$dsql->Execute('tag',$query);
while($row = $dsql->GetArray('tag'))
{
$tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']);
}
return $tags;
}

修改为

//获得某文档的所有tag
function GetTags($aid)
{
global $dsql;
$tags = '';
$query = "Select tag From `dede_taglist` where aid='$aid' ";
$dsql->Execute('tag',$query);
while($row = $dsql->GetArray('tag'))
{
$tags.= ($tags=='' ? "<a href=/tags.php?/{$row['tag']} target=_blank>{$row['tag']}</a>" : ','."<a href=/tags.php?/{$row['tag']} target=_blank>{$row['tag']}</a>");
}
return $tags;
}

五、做好sitemap、rss、tags
先看看雅酷网的sitemap、rss、tags是如何做的:

Sitemap:http://www.yacol.net/sitemap/
rss:http://www.yacol.net/data/rssmap.html
tags:http://www.yacol.net/tags.php

一定要重视这三方面的建设,因为他们是去全站各个页面的链接纲领。另外介绍一下修改他们的路径的方法,其实之前也有在我的博客里讲到过的《如何修改dedecms的网站地图sitemap的路径?》(http://www.guoxiongjie.com/web/93/)、《如何修改dedecms的tags.php的路径?》(http://www.guoxiongjie.com/web/59/)。

1、修改dedecms的sitemap的默认路径的方法:
打开/dede/makehtml_map.php,找到

if($dopost=="site")

{

$murl = $cfg_cmspath."/data/sitemap.html";

$tmpfile = $cfg_basedir.$cfg_templets_dir."/plus/sitemap.htm";

}

如果你要修改形如:http://www.guoxiongjie.com/sitemap.html ,则把上面的代码修改为:

if($dopost=="site")

{

$murl = $cfg_cmspath."/sitemap.html";

$tmpfile = $cfg_basedir.$cfg_templets_dir."/plus/sitemap.htm";

}

如果你要修改形如:http://www.guoxiongjie.com/sitemap/ ,则在根目录下建一个空文件夹,取名为sitemap(或者其他名字),然后把上面的代码修改为:

if($dopost=="site")

{

$murl = $cfg_cmspath."/sitemap/index.html";

$tmpfile = $cfg_basedir.$cfg_templets_dir."/plus/sitemap.htm";

}

以上为sitemap路径的修改方法,另外,我们要做到满意的状态,我们还需要修改sitemap的模板,即/templets/plus/sitemap.htm,以及/include/sitemap.class.php 这一个文件。

2、修改dedecms的tags.php的路径的方法:

默认的dedecms中,tags.php是在根目录下。但是如果两个程序都放在根目录下就可能出问题,比如据说,discuz和dedecms同在根目录下的话,dedecms里的tags.php和discuz里的index.php就会发生冲突。

(1)、在根目录下建立一个tags文件夹,把之前的tags.php放到这个tags的文件夹下,并重命名为index.php。

打开这个index.php,第二行代码如下:

require_once (dirname(__FILE__) . "/include/common.inc.php");

将它修改为:

require_once (dirname(__FILE__) . "/../include/common.inc.php");

(2)、打开/include/taglib/tag.lib.php,找到如下代码:

$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";

将它修改为:

$row['link'] = $cfg_cmsurl."/tags/index.php?".urlencode($row['keyword'])."";

现在试着打开 /tags/index.php 。

 

本文首发郭黑黑织梦博客 http://www.guoxiongjie.com ,然后发布到雅酷网http://www.yacol.net ,然后发布到A5 http://www.admin5.com 等。转摘请保留网址。谢谢!

【上一篇】谁欠谁的幸福
【下一篇】父亲节记

发表评论: