帝國、PHPCMS及織夢(mèng)對(duì)比(八):SEO輔助功能及個(gè)性化調(diào)用分析

2011-10-08 17:24:50來源:chinaz作者:

此前落葉針對(duì)PHPCMS、織夢(mèng)、帝國CMS從多個(gè)角度發(fā)過一系列文章作過一些功能和細(xì)節(jié)分析,這段時(shí)間常接觸到推廣部門SEO的各種細(xì)節(jié)需求較多,所以本文中針對(duì)一些SEO站內(nèi)優(yōu)化中一些常見的基本需求對(duì)這三款CMS作些對(duì)比分析

此前落葉針對(duì)PHPCMS、織夢(mèng)、帝國CMS從多個(gè)角度發(fā)過一系列文章作過一些功能和細(xì)節(jié)分析,這段時(shí)間常接觸到推廣部門SEO的各種細(xì)節(jié)需求較多,所以本文中針對(duì)一些SEO站內(nèi)優(yōu)化中一些常見的基本需求對(duì)這三款CMS作些對(duì)比分析。

1. SEO元標(biāo)簽設(shè)置及調(diào)用

PHPCMS:

PHPCMS中同一個(gè)模塊中的所有頁面基本都使用的是同一個(gè)公共的頭部,SEO元標(biāo)簽都是使用的統(tǒng)一的head數(shù)組中的值。

標(biāo)題:$head[‘title’]  關(guān)鍵詞:$head[‘keywords’] 描述:$head[‘description’]

那么首頁、欄目頁、列表頁及內(nèi)容頁,不同性質(zhì)的頁面,這些Meta屬性都使用的同一個(gè)標(biāo)簽,怎么實(shí)現(xiàn)不同頁面的個(gè)性化屬性的呢?

實(shí)際雖然所有模板引用公共頭部、共同的標(biāo)簽,但實(shí)際PHPCMS在PHP程序中或生成靜態(tài)時(shí),都作了判斷處理,調(diào)用后臺(tái)中不同的值來賦給$head數(shù)組。

\

調(diào)用方式:

首頁:

網(wǎng)站標(biāo)題:$PHPCMS["meta_title']

網(wǎng)站關(guān)鍵詞:$PHPCMS['meta_keywords']

網(wǎng)站描述:$PHPCMS['meta_description']

PHPCMS生成靜態(tài)時(shí)實(shí)際默認(rèn)的是以“網(wǎng)站名稱 – 網(wǎng)站標(biāo)題”($head[‘title’]=$PHPCMS[‘sitename’] - $PHPCMS[‘meta_title’])的方式來生成網(wǎng)站首頁的標(biāo)題,關(guān)鍵詞和描述則是直接使用的系統(tǒng)設(shè)置中如上圖所示關(guān)鍵詞和描述設(shè)置項(xiàng)的值。

一些SEO人員有時(shí)候希望首頁標(biāo)題能夠有更大的靈活度,或者不希望網(wǎng)站名稱顯示在前面,如果稍懂PHP,落葉通常推薦的處理方式是,直接修改PHPCMS根目錄下的include目錄下的html.class.php文件中的生成首頁部分的標(biāo)題設(shè)置。

Html.class.php中的第22行:

$head['title'] = $PHPCMS['sitename'].'-'.$PHPCMS['meta_title'];

可修改為:$head['title']= $PHPCMS['meta_title'];

這樣首頁標(biāo)題就可以不顯示網(wǎng)站名稱,而只顯示自己有meta_title中設(shè)置的內(nèi)容了。在落葉看來這實(shí)際沒什么太大的差別,不過實(shí)際還真有好些SEO人員在做站內(nèi)優(yōu)化時(shí),找到我技術(shù)這邊,要幫做這樣的調(diào)整。

如果對(duì)PHP不太了解,那同樣,可以直接模板中處理了,把頭部模板復(fù)制一份,僅供首頁模板引用,然后把標(biāo)簽中的{$head[‘title’]}修改成{$PHPCMS['meta_title']}即可。

當(dāng)然,實(shí)際也可以不復(fù)制模板,直接在PHPCMS中頭部使用邏輯判斷,如:

{if !$catid}{$PHPCMS['meta_title']}{else}$head['title']{/if}

上面判斷的含義是:當(dāng)欄目ID不存在時(shí)(即首頁)只顯示后臺(tái)meta_title中的內(nèi)容,如果存在(欄目頁、內(nèi)容頁等)則按默認(rèn)的方式顯示。

欄目頁:

欄目標(biāo)題:$meta_title

欄目關(guān)鍵詞:$meta_keywords

欄目描述:$meta_description

PHPCMS中默認(rèn)的欄目頁標(biāo)題組成為“欄目名稱 – 網(wǎng)站名稱”或者“欄目名稱 – 欄目標(biāo)題”,因?yàn)闄谀棵Q有時(shí)候僅僅是為了導(dǎo)航顯示方便或者分類名稱合理而設(shè)置,直接顯示在欄目頁標(biāo)題中可能不太合適或者不太利于SEO,所以同樣一些 SEO人員也經(jīng)常有需要?jiǎng)h掉欄目名稱在欄目頁標(biāo)題中顯示的需求。在PHPCMS中一勞永逸的做法,同樣是修改html.class.php文件中生成欄目頁部分欄目標(biāo)題設(shè)置。

如將:$head['title'] = $catname.'-'.($meta_title ? $meta_title : $PHPCMS['sitename']);

修改為:$head['title'] =$meta_title;

這樣欄目標(biāo)題就完全由SEO人員自定義了,在后欄目設(shè)置中填寫meta_title即可。

至于內(nèi)容頁,一般都是“網(wǎng)站標(biāo)題_欄目名稱 – 網(wǎng)站名稱”的方式,這點(diǎn)SEO人員修改的倒是不太多。如果需要修改,如有的不想要欄目名稱,也是類似的做法。

DEDECMS:

\

DEDECMS中默認(rèn)模板中雖然有把導(dǎo)航等公共頭部獨(dú)立出來,公共引用,但實(shí)際每個(gè)頁面都有使用單獨(dú)的頭部,可以直接在模板中為首頁、欄目頁、列表頁及內(nèi)容頁修改調(diào)用來實(shí)現(xiàn)不同的需求。默認(rèn)的標(biāo)題都是:{dede:field.title/}_{dede:global.cfg_webname/} 即“頁面標(biāo)題_網(wǎng)站名稱”的顯示方式。欄目頁如果不希望顯示欄目名稱或者作個(gè)性化修改,只需要使用上圖欄目設(shè)置中的SEO標(biāo)題這段后面顯示的 {$dede:field.seotitle}來替換即可。至于首頁,因?yàn)槭菃为?dú)使用頭部不影響其它頁面,大可直接在模板中寫標(biāo)題等屬性了。同樣,內(nèi)容頁一般默認(rèn)為“文章標(biāo)題_欄目名稱_網(wǎng)站名稱”了,需要修改的不多。

帝國CMS:

帝國CMS中欄目設(shè)置中雖然也有頁面關(guān)鍵詞及欄目描述設(shè)置,但沒有SEO標(biāo)題或META_TITLE這一項(xiàng),模板中對(duì)頁面標(biāo)題的標(biāo)簽均為[!--pagetitle--],實(shí)際每個(gè)頁面在生成靜態(tài)時(shí),都是即時(shí)替換,很難實(shí)現(xiàn)頁面標(biāo)題和個(gè)性化設(shè)置。

如網(wǎng)友提到,如果希望實(shí)現(xiàn)欄目頁以“欄目名稱 – 父欄目名稱 – 網(wǎng)站名稱”的方式,也需要大費(fèi)周折(通過靈動(dòng)標(biāo)簽SQL語句從欄目表中讀取當(dāng)前欄目ID對(duì)應(yīng)的父欄目名稱來實(shí)現(xiàn))。

[e:loop={"select * from [!db.pre!]enewsclass where classid="$GLOBALS[navclassid]'",1,24,0}][/e:loop]

if($class_r[$GLOBALS[navclassid]][bclassid]<>0)

{

echo'_[!--bclass.name--]';

}

else

{

echo "";

}

?>

對(duì)比說明:從基本的SEO META屬性設(shè)置及調(diào)用情況來看,織夢(mèng)相對(duì)更家省事,方便新手使用,他的缺點(diǎn)是頭部沒有公用(除了導(dǎo)航),浪費(fèi)不少代碼,并且如果自己設(shè)計(jì)模板,想實(shí)現(xiàn)像 PHPCMS那樣頭部公共調(diào)用時(shí),因?yàn)椴恢С衷谀0逯羞M(jìn)行邏輯判斷,想實(shí)現(xiàn)各類型頁面的個(gè)性化標(biāo)題設(shè)置會(huì)比較不方便。PHPCMS中這一點(diǎn)則更適合有編程基礎(chǔ)的SEO人員進(jìn)行操作,即可通修改靜態(tài)生成類來統(tǒng)一實(shí)現(xiàn),又可以通過在模板中邏輯判斷來實(shí)現(xiàn),對(duì)不懂編程的SEO人員,亦可仿照DEDE的方式,不同特征頁使用不同的頭部來實(shí)現(xiàn)調(diào)用。至于帝國,這點(diǎn)倒是顯得比較不那么方便。

2.  欄目結(jié)構(gòu)設(shè)置

一個(gè)純文章站無非六類頁面:首頁、欄目頁、列表頁、內(nèi)容頁、介紹單頁、專題單頁。

為了方便靈活的表現(xiàn),添加欄目結(jié)構(gòu)時(shí)除了增加普通的欄目頁,還需要時(shí)時(shí)用到單頁或?qū)n},不僅這樣,還是希望單頁和欄目頁在前臺(tái)表現(xiàn)上能夠不單分開,即某一個(gè)欄目下添加的可能是子欄目,也可能是子單頁。這一點(diǎn)在建企業(yè)站時(shí)尤為明顯:企業(yè)的關(guān)于我們下面應(yīng)該有企業(yè)文化、企業(yè)聯(lián)系方式等單頁面,同時(shí)亦會(huì)有企業(yè)新聞等欄目頁和列表頁。

SEO人員或者網(wǎng)站推廣人員在站內(nèi)優(yōu)化時(shí),網(wǎng)站規(guī)劃初期,肯定需要根據(jù)欄目的性質(zhì)以不同的結(jié)構(gòu)進(jìn)行展示,有的需要是單頁有的需要是列表。

在PHPCMS中的實(shí)現(xiàn)是新建一個(gè)名為“關(guān)于我們”的欄目,然后直接添加企業(yè)文化單頁、企業(yè)聯(lián)系方式單頁及企業(yè)新聞欄目頁即可。前臺(tái)統(tǒng)一使用欄目標(biāo)簽調(diào)用即可。

在DEDECMS中可建一個(gè)名為“關(guān)于我們”的欄目,然后下面以子欄目的形式添加企業(yè)文化、企業(yè)聯(lián)系方式及企業(yè)新聞三個(gè)欄目。然后在企業(yè)文化、企業(yè)聯(lián)系方式的欄目設(shè)置處,填寫“欄目內(nèi)容”,然后在欄目模板中以{dede:field.content/}調(diào)用,以后不要在該欄目下發(fā)任何文章,這樣變相的把欄目當(dāng)作單頁面來使用。當(dāng)然也可以使用DEDE的單頁面功能,新建單頁,在模板中手動(dòng)加鏈接了。

在帝國CMS中則只能是找到單頁面模塊,新建一個(gè)名為企業(yè)文化的單頁面和一個(gè)為名企業(yè)聯(lián)系方式的單頁,復(fù)制鏈接地址,然后前臺(tái)改模板時(shí)手動(dòng)加上去了。

很明顯,這里PHPCMS又明顯的顯得順暢,后兩者雖然功能上實(shí)現(xiàn)同樣的需求,但似乎都不是那么正式。當(dāng)然,這點(diǎn)DEDECMS中比帝國中做得更好些。

3.  面包屑導(dǎo)航

PHPCMS中調(diào)用面包屑導(dǎo)航的代碼:首頁{catpos($catid)}

DEDECMS中生成面包屑導(dǎo)航的代碼:當(dāng)前位置: {dede:field name='position'/}

帝國CMS生成面包屑導(dǎo)航的代碼:[!--newsnav--]

三款CMS在默認(rèn)情況下,都能很方便的實(shí)現(xiàn)面包屑導(dǎo)航,但往往SEO人員或者技術(shù)人員不同情況下都會(huì)有一些特別的需求。

如,A欄目下的B欄目下發(fā)了名為c.html的文章,上三者默認(rèn)生成的面包屑導(dǎo)航是:首頁>欄目A>欄目B,而實(shí)際可能B欄目僅僅是為了方便管理而分類的需要,不需要顯示在面包屑導(dǎo)航中,也不希望別人直接點(diǎn)擊訪問欄目B對(duì)應(yīng)的頁面,那這三款CMS中應(yīng)該怎么處理呢?

PHPCMS中,他是把所有欄目都緩存起來,并存儲(chǔ)在全局?jǐn)?shù)組($CATEGORY)中的,在任何頁面,都可以根據(jù)當(dāng)前頁面所屬的欄目ID 即$catid,來讀取欄目名稱、上級(jí)欄目名稱、上級(jí)欄目名稱、上級(jí)欄目URL等,甚至上級(jí)的上級(jí)的信息均可以讀取到。對(duì)上面的需求則只需要使用 {$CATEGORY[$CATEGORY[$catid][‘parentid’]][‘catename’]}即根據(jù)c.html頁面的欄目ID讀取到了上級(jí)欄目A的欄目名稱,URL也類似方法讀取到。

DEDECMS和帝國CMS中則一下子,見到明顯的短板了。都沒能找到直接的通過簡單標(biāo)簽調(diào)用的方法。只有能過相關(guān)的SQL語句來實(shí)現(xiàn)了。如DEDECMS中則需要使用類似如下的方法來調(diào)用了:

{dede:type}

[field:id runphp=yes]

$tsql = new DedeSql(false);

$typelink2 = '';

$tsql->SetQuery("Select i.typedir,i.id,i.typename From #@__arctype t left join #@__arctype i on i.id=t.reid where t.id='@me'");

$tsql->Execute('t');

while($row = $tsql->GetArray('t',MYSQL_ASSOC))

{

$typelink2 .= "".$row['typename']."";

}

@me=str_replace("{cmspath}","",$typelink2);

[/field:id]

{/dede:type}

帝國CMS中亦可以通過靈動(dòng)標(biāo)簽SQL語句類似上面織夢(mèng)那樣實(shí)現(xiàn),但我想還是直接放棄吧。上面僅僅是一個(gè)這么簡單的需求,還不得不寫這么大堆SQL語句和PHP代碼,其他更復(fù)雜的個(gè)性化需求怎么辦。

舉個(gè)更常見的需求,本來c.html是分在A欄目下的B欄目里的,但是前臺(tái)整合需要,實(shí)現(xiàn)歸在C欄目下顯示,面包屑導(dǎo)航結(jié)構(gòu)是首頁>欄目 D>,(后臺(tái)欄目分類是一回事,前臺(tái)整合是另一回事,許多為了實(shí)現(xiàn)結(jié)構(gòu)目錄扁平化或文章營銷性質(zhì)考慮,都有遇到這樣的情況),這樣的需求,按上面的分析,在PHPCMS下是很方便實(shí)現(xiàn)的,那DEDECMS和帝國CMS中估計(jì)又得頭大。

URL結(jié)構(gòu)設(shè)置

毫無疑問,URL結(jié)構(gòu)的調(diào)整,在SEO站內(nèi)優(yōu)化中也是常需要考慮到的因素,有時(shí)候需要按照欄目目錄結(jié)構(gòu)來顯示內(nèi)容的路徑,有時(shí)候需要把所有內(nèi)容都只歸于一個(gè)目錄下,因?yàn)镃MS中自定義URL規(guī)則的功能就顯得尤為重要了。這點(diǎn)此前落葉的CMS對(duì)比分析系列文章中作過詳細(xì)的分析。結(jié)果是:功能上 PHPCMS>DEDECMS>帝國,細(xì)節(jié)上DEDECMS>PHPCMS>帝國。這里限于篇幅,不再贅述。

作者:落葉(t.qq.com/guohui) 網(wǎng)站:http://www.pmume.com

關(guān)鍵詞:帝國PHPCMSdedecms

贊助商鏈接: