此前落葉針對(duì)PHPCMS、織夢(mèng)、帝國(guó)CMS從多個(gè)角度發(fā)過(guò)一系列文章作過(guò)一些功能和細(xì)節(jié)分析,這段時(shí)間常接觸到推廣部門(mén)SEO的各種細(xì)節(jié)需求較多,所以本文中針對(duì)一些SEO站內(nèi)優(yōu)化中一些常見(jiàn)的基本需求對(duì)這三款CMS作些對(duì)比分析。
1. SEO元標(biāo)簽設(shè)置及調(diào)用
PHPCMS:
PHPCMS中同一個(gè)模塊中的所有頁(yè)面基本都使用的是同一個(gè)公共的頭部,SEO元標(biāo)簽都是使用的統(tǒng)一的head數(shù)組中的值。
標(biāo)題:$head[‘title’] 關(guān)鍵詞:$head[‘keywords’] 描述:$head[‘description’]
那么首頁(yè)、欄目頁(yè)、列表頁(yè)及內(nèi)容頁(yè),不同性質(zhì)的頁(yè)面,這些Meta屬性都使用的同一個(gè)標(biāo)簽,怎么實(shí)現(xiàn)不同頁(yè)面的個(gè)性化屬性的呢?
實(shí)際雖然所有模板引用公共頭部、共同的標(biāo)簽,但實(shí)際PHPCMS在PHP程序中或生成靜態(tài)時(shí),都作了判斷處理,調(diào)用后臺(tái)中不同的值來(lái)賦給$head數(shù)組。
調(diào)用方式:
首頁(yè):
網(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’])的方式來(lái)生成網(wǎng)站首頁(yè)的標(biāo)題,關(guān)鍵詞和描述則是直接使用的系統(tǒng)設(shè)置中如上圖所示關(guān)鍵詞和描述設(shè)置項(xiàng)的值。
一些SEO人員有時(shí)候希望首頁(yè)標(biāo)題能夠有更大的靈活度,或者不希望網(wǎng)站名稱顯示在前面,如果稍懂PHP,落葉通常推薦的處理方式是,直接修改PHPCMS根目錄下的include目錄下的html.class.php文件中的生成首頁(yè)部分的標(biāo)題設(shè)置。
Html.class.php中的第22行:
$head['title'] = $PHPCMS['sitename'].'-'.$PHPCMS['meta_title'];
可修改為:$head['title']= $PHPCMS['meta_title'];
這樣首頁(yè)標(biāo)題就可以不顯示網(wǎng)站名稱,而只顯示自己有meta_title中設(shè)置的內(nèi)容了。在落葉看來(lái)這實(shí)際沒(méi)什么太大的差別,不過(guò)實(shí)際還真有好些SEO人員在做站內(nèi)優(yōu)化時(shí),找到我技術(shù)這邊,要幫做這樣的調(diào)整。
如果對(duì)PHP不太了解,那同樣,可以直接模板中處理了,把頭部模板復(fù)制一份,僅供首頁(yè)模板引用,然后把標(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í)(即首頁(yè))只顯示后臺(tái)meta_title中的內(nèi)容,如果存在(欄目頁(yè)、內(nèi)容頁(yè)等)則按默認(rèn)的方式顯示。
欄目頁(yè):
欄目標(biāo)題:$meta_title
欄目關(guān)鍵詞:$meta_keywords
欄目描述:$meta_description
PHPCMS中默認(rèn)的欄目頁(yè)標(biāo)題組成為“欄目名稱 – 網(wǎng)站名稱”或者“欄目名稱 – 欄目標(biāo)題”,因?yàn)闄谀棵Q有時(shí)候僅僅是為了導(dǎo)航顯示方便或者分類名稱合理而設(shè)置,直接顯示在欄目頁(yè)標(biāo)題中可能不太合適或者不太利于SEO,所以同樣一些 SEO人員也經(jīng)常有需要?jiǎng)h掉欄目名稱在欄目頁(yè)標(biāo)題中顯示的需求。在PHPCMS中一勞永逸的做法,同樣是修改html.class.php文件中生成欄目頁(yè)部分欄目標(biāo)題設(shè)置。
如將:$head['title'] = $catname.'-'.($meta_title ? $meta_title : $PHPCMS['sitename']);
修改為:$head['title'] =$meta_title;
這樣欄目標(biāo)題就完全由SEO人員自定義了,在后欄目設(shè)置中填寫(xiě)meta_title即可。
至于內(nèi)容頁(yè),一般都是“網(wǎng)站標(biāo)題_欄目名稱 – 網(wǎng)站名稱”的方式,這點(diǎn)SEO人員修改的倒是不太多。如果需要修改,如有的不想要欄目名稱,也是類似的做法。
DEDECMS:
DEDECMS中默認(rèn)模板中雖然有把導(dǎo)航等公共頭部獨(dú)立出來(lái),公共引用,但實(shí)際每個(gè)頁(yè)面都有使用單獨(dú)的頭部,可以直接在模板中為首頁(yè)、欄目頁(yè)、列表頁(yè)及內(nèi)容頁(yè)修改調(diào)用來(lái)實(shí)現(xiàn)不同的需求。默認(rèn)的標(biāo)題都是:{dede:field.title/}_{dede:global.cfg_webname/} 即“頁(yè)面標(biāo)題_網(wǎng)站名稱”的顯示方式。欄目頁(yè)如果不希望顯示欄目名稱或者作個(gè)性化修改,只需要使用上圖欄目設(shè)置中的SEO標(biāo)題這段后面顯示的 {$dede:field.seotitle}來(lái)替換即可。至于首頁(yè),因?yàn)槭菃为?dú)使用頭部不影響其它頁(yè)面,大可直接在模板中寫(xiě)標(biāo)題等屬性了。同樣,內(nèi)容頁(yè)一般默認(rèn)為“文章標(biāo)題_欄目名稱_網(wǎng)站名稱”了,需要修改的不多。
帝國(guó)CMS:
帝國(guó)CMS中欄目設(shè)置中雖然也有頁(yè)面關(guān)鍵詞及欄目描述設(shè)置,但沒(méi)有SEO標(biāo)題或META_TITLE這一項(xiàng),模板中對(duì)頁(yè)面標(biāo)題的標(biāo)簽均為[!--pagetitle--],實(shí)際每個(gè)頁(yè)面在生成靜態(tài)時(shí),都是即時(shí)替換,很難實(shí)現(xiàn)頁(yè)面標(biāo)題和個(gè)性化設(shè)置。
如網(wǎng)友提到,如果希望實(shí)現(xiàn)欄目頁(yè)以“欄目名稱 – 父欄目名稱 – 網(wǎng)站名稱”的方式,也需要大費(fèi)周折(通過(guò)靈動(dòng)標(biāo)簽SQL語(yǔ)句從欄目表中讀取當(dāng)前欄目ID對(duì)應(yīng)的父欄目名稱來(lái)實(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ì)比說(shuō)明:從基本的SEO META屬性設(shè)置及調(diào)用情況來(lái)看,織夢(mèng)相對(duì)更家省事,方便新手使用,他的缺點(diǎn)是頭部沒(méi)有公用(除了導(dǎo)航),浪費(fèi)不少代碼,并且如果自己設(shè)計(jì)模板,想實(shí)現(xiàn)像 PHPCMS那樣頭部公共調(diào)用時(shí),因?yàn)椴恢С衷谀0逯羞M(jìn)行邏輯判斷,想實(shí)現(xiàn)各類型頁(yè)面的個(gè)性化標(biāo)題設(shè)置會(huì)比較不方便。PHPCMS中這一點(diǎn)則更適合有編程基礎(chǔ)的SEO人員進(jìn)行操作,即可通修改靜態(tài)生成類來(lái)統(tǒng)一實(shí)現(xiàn),又可以通過(guò)在模板中邏輯判斷來(lái)實(shí)現(xiàn),對(duì)不懂編程的SEO人員,亦可仿照DEDE的方式,不同特征頁(yè)使用不同的頭部來(lái)實(shí)現(xiàn)調(diào)用。至于帝國(guó),這點(diǎn)倒是顯得比較不那么方便。
2. 欄目結(jié)構(gòu)設(shè)置
一個(gè)純文章站無(wú)非六類頁(yè)面:首頁(yè)、欄目頁(yè)、列表頁(yè)、內(nèi)容頁(yè)、介紹單頁(yè)、專題單頁(yè)。
為了方便靈活的表現(xiàn),添加欄目結(jié)構(gòu)時(shí)除了增加普通的欄目頁(yè),還需要時(shí)時(shí)用到單頁(yè)或?qū)n},不僅這樣,還是希望單頁(yè)和欄目頁(yè)在前臺(tái)表現(xiàn)上能夠不單分開(kāi),即某一個(gè)欄目下添加的可能是子欄目,也可能是子單頁(yè)。這一點(diǎn)在建企業(yè)站時(shí)尤為明顯:企業(yè)的關(guān)于我們下面應(yīng)該有企業(yè)文化、企業(yè)聯(lián)系方式等單頁(yè)面,同時(shí)亦會(huì)有企業(yè)新聞等欄目頁(yè)和列表頁(yè)。
SEO人員或者網(wǎng)站推廣人員在站內(nèi)優(yōu)化時(shí),網(wǎng)站規(guī)劃初期,肯定需要根據(jù)欄目的性質(zhì)以不同的結(jié)構(gòu)進(jìn)行展示,有的需要是單頁(yè)有的需要是列表。
在PHPCMS中的實(shí)現(xiàn)是新建一個(gè)名為“關(guān)于我們”的欄目,然后直接添加企業(yè)文化單頁(yè)、企業(yè)聯(lián)系方式單頁(yè)及企業(yè)新聞欄目頁(yè)即可。前臺(tái)統(tǒng)一使用欄目標(biāo)簽調(diào)用即可。
在DEDECMS中可建一個(gè)名為“關(guān)于我們”的欄目,然后下面以子欄目的形式添加企業(yè)文化、企業(yè)聯(lián)系方式及企業(yè)新聞三個(gè)欄目。然后在企業(yè)文化、企業(yè)聯(lián)系方式的欄目設(shè)置處,填寫(xiě)“欄目?jī)?nèi)容”,然后在欄目模板中以{dede:field.content/}調(diào)用,以后不要在該欄目下發(fā)任何文章,這樣變相的把欄目當(dāng)作單頁(yè)面來(lái)使用。當(dāng)然也可以使用DEDE的單頁(yè)面功能,新建單頁(yè),在模板中手動(dòng)加鏈接了。
在帝國(guó)CMS中則只能是找到單頁(yè)面模塊,新建一個(gè)名為企業(yè)文化的單頁(yè)面和一個(gè)為名企業(yè)聯(lián)系方式的單頁(yè),復(fù)制鏈接地址,然后前臺(tái)改模板時(shí)手動(dòng)加上去了。
很明顯,這里PHPCMS又明顯的顯得順暢,后兩者雖然功能上實(shí)現(xiàn)同樣的需求,但似乎都不是那么正式。當(dāng)然,這點(diǎn)DEDECMS中比帝國(guó)中做得更好些。
3. 面包屑導(dǎo)航
PHPCMS中調(diào)用面包屑導(dǎo)航的代碼:首頁(yè){catpos($catid)}
DEDECMS中生成面包屑導(dǎo)航的代碼:當(dāng)前位置: {dede:field name='position'/}
帝國(guó)CMS生成面包屑導(dǎo)航的代碼:[!--newsnav--]
三款CMS在默認(rèn)情況下,都能很方便的實(shí)現(xiàn)面包屑導(dǎo)航,但往往SEO人員或者技術(shù)人員不同情況下都會(huì)有一些特別的需求。
如,A欄目下的B欄目下發(fā)了名為c.html的文章,上三者默認(rèn)生成的面包屑導(dǎo)航是:首頁(yè)>欄目A>欄目B,而實(shí)際可能B欄目?jī)H僅是為了方便管理而分類的需要,不需要顯示在面包屑導(dǎo)航中,也不希望別人直接點(diǎn)擊訪問(wèn)欄目B對(duì)應(yīng)的頁(yè)面,那這三款CMS中應(yīng)該怎么處理呢?
PHPCMS中,他是把所有欄目都緩存起來(lái),并存儲(chǔ)在全局?jǐn)?shù)組($CATEGORY)中的,在任何頁(yè)面,都可以根據(jù)當(dāng)前頁(yè)面所屬的欄目ID 即$catid,來(lái)讀取欄目名稱、上級(jí)欄目名稱、上級(jí)欄目名稱、上級(jí)欄目URL等,甚至上級(jí)的上級(jí)的信息均可以讀取到。對(duì)上面的需求則只需要使用 {$CATEGORY[$CATEGORY[$catid][‘parentid’]][‘catename’]}即根據(jù)c.html頁(yè)面的欄目ID讀取到了上級(jí)欄目A的欄目名稱,URL也類似方法讀取到。
DEDECMS和帝國(guó)CMS中則一下子,見(jiàn)到明顯的短板了。都沒(méi)能找到直接的通過(guò)簡(jiǎn)單標(biāo)簽調(diào)用的方法。只有能過(guò)相關(guān)的SQL語(yǔ)句來(lái)實(shí)現(xiàn)了。如DEDECMS中則需要使用類似如下的方法來(lái)調(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}
帝國(guó)CMS中亦可以通過(guò)靈動(dòng)標(biāo)簽SQL語(yǔ)句類似上面織夢(mèng)那樣實(shí)現(xiàn),但我想還是直接放棄吧。上面僅僅是一個(gè)這么簡(jiǎn)單的需求,還不得不寫(xiě)這么大堆SQL語(yǔ)句和PHP代碼,其他更復(fù)雜的個(gè)性化需求怎么辦。
舉個(gè)更常見(jiàn)的需求,本來(lái)c.html是分在A欄目下的B欄目里的,但是前臺(tái)整合需要,實(shí)現(xiàn)歸在C欄目下顯示,面包屑導(dǎo)航結(jié)構(gòu)是首頁(yè)>欄目 D>,(后臺(tái)欄目分類是一回事,前臺(tái)整合是另一回事,許多為了實(shí)現(xiàn)結(jié)構(gòu)目錄扁平化或文章?tīng)I(yíng)銷性質(zhì)考慮,都有遇到這樣的情況),這樣的需求,按上面的分析,在PHPCMS下是很方便實(shí)現(xiàn)的,那DEDECMS和帝國(guó)CMS中估計(jì)又得頭大。
URL結(jié)構(gòu)設(shè)置
毫無(wú)疑問(wèn),URL結(jié)構(gòu)的調(diào)整,在SEO站內(nèi)優(yōu)化中也是常需要考慮到的因素,有時(shí)候需要按照欄目目錄結(jié)構(gòu)來(lái)顯示內(nèi)容的路徑,有時(shí)候需要把所有內(nèi)容都只歸于一個(gè)目錄下,因?yàn)镃MS中自定義URL規(guī)則的功能就顯得尤為重要了。這點(diǎn)此前落葉的CMS對(duì)比分析系列文章中作過(guò)詳細(xì)的分析。結(jié)果是:功能上 PHPCMS>DEDECMS>帝國(guó),細(xì)節(jié)上DEDECMS>PHPCMS>帝國(guó)。這里限于篇幅,不再贅述。
作者:落葉(t.qq.com/guohui) 網(wǎng)站:http://www.pmume.com