腾讯云网站解决方案帮您轻松应对建站成本高/网络不稳等常见问题

[帝国cms] 织梦、帝国及PHPCMS对比(8):SEO辅助功能及个性化调用分析

2
回复
1287
查看
[复制链接]

763

主题

777

帖子

3万

积分

董事

Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72

积分
32938
发表于 19-4-25 15:01:51 | 显示全部楼层 |阅读模式      紫钻仅向指定用户开放  
                  此前落叶针对PHPCMS、织梦、帝国CMS从多个角度发过一系列文章作过一些功能和细节分析,这段时间常打仗到推广部门SEO的各种细节需求较多,以是本文中针对一些SEO站内优化中一些常见的根本需求对这三款CMS作些对比分析。
- E( O% B, y! w& O! y  1. SEO元标签设置及调用
  c0 ~6 ]4 P' u" F4 P; [) \7 L  PHPCMS:
. j- {& P2 F8 U$ w+ Q  PHPCMS中同一个模块中的全部页面基本都使用的是同一个公共的头部,SEO元标签都是使用的同一的head数组中的值。
3 r; C2 G5 e* d, W  ]/ g+ r0 Q  标题:$head[‘title’] 关键词:$head[‘keywords’] 形貌:$head[‘description’]3 P8 p, j8 g9 `* r
  那么首页、栏目页、列表页及内容页,差别性子的页面,这些Meta属性都使用的同一个标签,怎么实现不同页面的个性化属性的呢?
. {6 M, p9 j4 o  \, {$ [  现实固然所有模板引用公共头部、共同的标签,但实际PHPCMS在PHP步调中或天生静态时,都作了判断处置处罚,调用配景中不同的值来赋给$head数组。
/ w0 y, P6 \  J7 e5 A- @ 5ce0b9e69e8700023832b333ad7e6354.jpg   调用方式:% _  M+ \( F- U, c7 ^
  首页:2 U6 n7 c5 M. V- _5 k$ Y  M4 ~
  网站标题:$PHPCMS['meta_title']$ M' K* M2 d1 w8 v5 b
  网站关键词:$PHPCMS['meta_keywords']- `' b. C1 J" n$ v2 p
  网站描述:$PHPCMS['meta_description']
6 m: Y, d* D% P5 h. D  PHPCMS生成静态时实际默认的是以“网站名称 – 网站标题”($head[‘title’]=$PHPCMS[‘sitename’] -  $PHPCMS[‘meta_title’])的方式来生成网站首页的标题,关键词和描述则是直接使用的体系设置中如上图所示关键词和描述设置项的值。7 k: z: d3 w# [0 b
  一些SEO职员偶然候渴望首页标题可以大概有更大的机动度,大概不希望网站名称体现在前面,假如稍懂PHP,落叶通常保举的处理方式是,直接修改PHPCMS根目次下的include目录下的html.class.php文件中的生成首页部分的标题设置。* s. i- B+ D$ [- _+ {' G
  Html.class.php中的第22行:
' e& J" A- o% n7 b2 {8 @
  1.   $head['title'] = $PHPCMS['sitename'].'-'.$PHPCMS['meta_title'];
    " c4 V2 Z5 H% ~% N) b
复制代码
  可修改为:( ^+ w$ t" z4 o" T; v0 N
  1. $head['title']= $PHPCMS['meta_title'];
复制代码
  如许首页标题就可以不显示网站名称,而只显示自己有meta_title中设置的内容了。在落叶看来这实际没什么太大的差异,不外实际还真有好些SEO人员在做站内优化时,找到我技能这边,要帮做这样的调解。
0 z  A7 _  H3 |! O3 m' c, M  如果对PHP不太相识,那同样,可以直接模板中处理了,把头部模板复制一份,仅供首页模板引用,然后把标签中的{$head[‘title’]}修改成{$PHPCMS['meta_title']}即可。
' n& U, z4 c; b, o( O$ u5 [  固然,实际也可以不复制模板,直接在PHPCMS中头部使用逻辑判断,如:7 D  ]' X& {. M" f) j
  {if !$catid}{$PHPCMS['meta_title']}{else}$head['title']{/if}; x/ Z- {9 m" J
  上面判断的寄义是:当栏目ID不存在时(即首页)只显示后台meta_title中的内容,如果存在(栏目页、内容页等)则按默认的方式显示。
4 l  l& U. A+ V5 p9 y  H$ @. K  栏目页:7 m5 `( Y* f+ c+ L1 H
  栏目的题:$meta_title
) m6 R: |* }' w4 K* e  y+ S  栏目关键词:$meta_keywords
0 J( s4 ^3 }# K: C. \  栏目描述:$meta_description
! D! P" _4 e% I& p5 B- O: U  PHPCMS中默认的栏目页标题构成为“栏目名称 – 网站名称”或者“栏目名称 –  栏目标题”,由于栏目名称有时间仅仅是为了导航显示方便或者分类名称公道而设置,直接显示在栏目页标题中大概不太符合或者不太利于SEO,所以同样一些  SEO人员也经常有必要删掉栏目名称在栏目页标题中显示的需求。在PHPCMS中一劳永逸的做法,同样是修改html.class.php文件中生成栏目页部分栏目标题设置。- _3 {7 e5 x) @# T# C
  如将:) X. x( V" Y/ r$ d! X$ D' |( i
  1. $head['title'] = $catname.'-'.($meta_title ? $meta_title :  $PHPCMS['sitename']);
复制代码

/ p0 ^, E% H" g1 o9 X0 T9 T" t/ P  修改为:+ t/ ~/ O# B( _/ \8 t0 r
  1. $head['title'] =$meta_title;
复制代码
/ @" E7 c8 z. L  @) F5 J/ X& H
  这样栏目标题就完全由SEO人员自界说了,在后栏目设置中填写meta_title即可。) O1 E! H  @& I# G6 j% ~- p/ Q
  至于内容页,一样寻常都是“网站标题_栏目名称 –  网站名称”的方式,这点SEO人员修改的倒是不太多。如果需要修改,如有的不想要栏目名称,也是类似的做法。
' @$ l6 t& v" I* H- w9 s  DEDECMS:
& E4 v7 D* S* H5 K( e# A 6262326a96521106d9f1502f74fa359c.jpg   DEDECMS中默认模板中虽然有把导航等公共头部独立出来,公共引用,但实际每个页面都有使用单独的头部,可以直接在模板中为首页、栏目页、列表页及内容页修改调用来实现不同的需求。默认的标题都是:{dede:field.title/}_{dede:global.cfg_webname/}  即“页面标题_网站名称”的显示方式。栏目页如果不希望显示栏目名称或者作个性化修改,只需要使用上图栏目设置中的SEO标题这段反面显示的  {$dede:field.seotitle}来更换即可。至于首页,因为是单独使用头部不影响别的页面,大可直接在模板中写标题等属性了。同样,内容页一般默以为“文章标题_栏目名称_网站名称”了,需要修改的不多。8 }2 |$ S8 |, `: a9 M8 w* ]
  帝国CMS:
, }) i. r! b* e' G7 t3 Z& V0 I  帝国CMS中栏目设置中虽然也有页面关键词及栏目描述设置,但没有SEO标题或META_TITLE这一项,模板中对页面标题的标签均为[!--pagetitle--],实际每个页面在生成静态时,都是即时替换,很难实现页面标题和个性化设置。' h( p) O  o4 J. Y. x: M
  如网友提到,如果希望实现栏目页以“栏目名称 – 父栏目名称 –  网站名称”的方式,也需要大费周折(通过灵动标签SQL语句从栏目表中读取当前栏目ID对应的父栏目名称来实现)。6 {/ G: y4 p: k. t1 A1 ^
  1.   [e:loop={"select * from [!db.pre!]enewsclass where classid='$GLOBALS[navclassid]'",1,24,0}][/e:loop]! h  x+ ~& [. E& e, W4 W

  2. 7 H* o: N, Z. K% F" F
  3.   if($class_r[$GLOBALS[navclassid]][bclassid]<>0)
    ( R, m" s1 Q# a; k$ p4 L

  4. 6 f3 ?2 w& o- |$ v
  5.   {' g5 H7 m* u5 }+ f' ]5 R& i

  6. ! w* D+ j+ w/ m) R# g0 H5 ]
  7.   echo'_[!--bclass.name--]';
    9 r- f+ i; Z' A
  8. + d! d* [$ s2 Z  I1 `. z0 V' W
  9.   }
    - M9 O2 K# r' r4 o
  10. 4 d* B$ M4 T# @4 C. E! R  m* p
  11.   else
      S; n7 x+ O8 Y; L
  12. $ o" @- s+ ?# ~  B
  13.   {
    ; c& B1 ~+ |% r9 Z. l% }" X- G( J

  14. 0 Q) ^. B( y) S/ B! o4 K
  15.   echo "";; [) U2 V: u) ]$ ?  f% x

  16. 6 V/ Q4 y# R, h' t" }+ K) `- j# E
  17.   }6 K' s7 q8 ~/ p1 o6 r

  18. . B' \, R# G: H& p; u* [( `7 {
  19.   ?>
复制代码

% ~9 Y: q& L6 D& P  对比分析:从基本的SEO  META属性设置及调用情况来看,织梦相对更家省事,方便新手使用,他的缺点是头部没有公用(除了导航),浪费不少源码,而且如果自己操持模板,想实现像  PHPCMS那样头部公共调用时,因为不支持在模板中举行逻辑判断,想实现各范例页面的个性化标题设置会比力不方便。PHPCMS中这一点则更得当有编程底子的SEO人员进行利用,即可通修改静态生成类来统一实现,又可以通过在模板中逻辑判断来实现,对不懂编程的SEO人员,亦可仿照DEDE的方式,不同特性页使用不同的头部来实现调用。至于帝国,这点倒是显得比较不那么方便。2 _$ w1 s' F# ~# I+ e3 ]: Q( g: O
  2. 栏目布局设置" n$ m, T4 l9 `
  一个纯文章站无非六类页面:首页、栏目页、列表页、内容页、先容单页、专题单页。* |1 }0 J# x* N
  为了方便灵活的表现,添加栏目结构时除了增长平常的栏目页,还需要时时用到单页或专题,不但这样,照旧希望单页和栏目页在前台表现上能够不但分开,即某一个栏目下添加的可能是子栏目,也可能是子单页。这一点在建企业站时尤为显着:企业的关于我们下面应该有企业文化、企业接洽方式等单页面,同时亦会有企业消息等栏目页和列表页。" {8 U; t" _0 [# F3 ]" V+ V8 W
  SEO人员或者网站推广人员在站内优化时,网站规划初期,肯定需要根据栏目标性质以不同的结构进行展示,有的需要是单页有的需要是列表。
+ N  i" `( O0 j  在PHPCMS中的实现是新建一个名为“关于我们”的栏目,然后直接添加企业文化单页、企业联系方式单页及企业新闻栏目页即可。前台统一使用栏目标签调用即可。7 [, ^! v7 m) g6 k) A% y5 E- R( `
  在DEDECMS中可建一个名为“关于我们”的栏目,然后下面以子栏目的情势添加企业文化、企业联系方式及企业新闻三个栏目。然后在企业文化、企业联系方式的栏目设置处,填写“栏目内容”,然后在栏目模板中以{dede:field.content/}调用,以后不要在该栏目下发任何文章,这样变相的把栏目看成单页面来使用。当然也可以使用DEDE的单页面功能,新建单页,在模板中手动加链接了。
0 y2 J+ l1 r$ D, `+ w7 ]6 ~  在帝国CMS中则只能是找到单页面模块,新建一个名为企业文化的单页面和一个为名企业联系方式的单页,复制链接所在,然后前台改模板时手动加上去了。
* X( D/ g7 N( F. b8 K) k- s3 m# V  很明显,这里PHPCMS又明显的显得顺畅,后两者虽然功能上实现同样的需求,但似乎都不是那么正式。当然,这点DEDECMS中比帝国中做得更好些。' V! J* P) p: i5 @1 D* Z, G
  3. 面包屑导航4 p9 F8 `# B' ^5 w
  PHPCMS中调用面包屑导航的代码:首页{catpos($catid)}
7 r, B+ F; l2 Q  DEDECMS中生成面包屑导航的代码:当前位置: {dede:field name='position'/}3 }: t( S1 O* \2 W
  帝国CMS生成面包屑导航的代码:[!--newsnav--]6 ^0 z$ \7 Z; y) r0 W
  三款CMS在默认情况下,都能很方便的实现面包屑导航,但通常SEO人员或者技术人员不怜悯况下都会有一些特殊的需求。
( G# Y1 S$ t( E9 F3 M  如,A栏目下的B栏目下发了名为c.html的文章,上三者默认生成的面包屑导航是:首页>栏目A>栏目B,而实际可能B栏目仅仅是为了方便管理而分类的需要,不需要显示在面包屑导航中,也不希望别人直接点击访问栏目B对应的页面,那这三款CMS中应该怎么处理呢?
3 \! G! E! U; W4 q  PHPCMS中,他是把所有栏目都缓存起来,并存储在全局数组($CATEGORY)中的,在任何页面,都可以根据当前页面所属的栏目ID  即$catid,来读取栏目名称、上级栏目名称、上级栏目名称、上级栏目URL等,以致上级的上级的信息均可以读取到。对上面的需求则只需要使用  {$CATEGORY[$CATEGORY[$catid][‘parentid’]][‘catename’]}即根据c.html页面的栏目ID读取到了上级栏目A的栏目名称,URL也类似方法读取到。6 ~" M9 Z* @) Y5 {8 _8 B
  DEDECMS和帝国CMS中则一下子,见到明显的短板了。都没能找到直接的通过简朴标签调用的方法。只有能过干系的SQL语句来实现了。如DEDECMS中则需要使用类似如下的方法来调用了:
, l+ ^6 g( D1 @) h- m
  1.   {dede:type}
    " S* f; _+ `1 ^; V& }

  2. # O* v. |! k" H/ X
  3.   [field:id runphp=yes]
    ) Z9 K' J9 W, Y7 @3 R

  4. 7 y$ e# O* S9 z& N7 y) @
  5.   $tsql = new DedeSql(false);
    % \" M( l/ c+ p' i
  6. * x% l/ p+ M% Q0 T0 p
  7.   $typelink2 = '';* Z0 A+ V8 U3 \; S$ B

  8. 3 g( l& _$ ]$ Q2 G" _
  9.   $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'");& Q+ K6 z* V( v7 Y( C
  10. 9 u# v2 I0 s& j6 w
  11.   $tsql->Execute('t');) d! M9 f) W, T1 A2 m5 P
  12. 9 Z  }9 w2 V- `7 F( L$ F
  13.   while($row = $tsql->GetArray('t',MYSQL_ASSOC))
    1 w( w, o" D$ a

  14. . |* e. p  s- J$ O' |1 H$ @
  15.   {1 X5 g8 \; }, A1 u% u) s1 B
  16. * T- q" g- f% i* @4 o  w
  17.   $typelink2 .= "".$row['typename']."";0 _% L6 ]8 X, i
  18. ! Y6 e1 C' o% ~) L2 }$ g* w2 `
  19.   }
    3 x4 C9 @( }- ~

  20. , e; C0 g6 r! K: f5 L* }
  21.   @me=str_replace("{cmspath}","",$typelink2);
    ( y% d, d0 ?. K! m* v5 ~

  22.   Y: |$ `: @: j6 w+ k
  23.   [/field:id]' @7 \$ F# x' `0 e. H
  24. 9 |( u' P% ~: h, v
  25.   {/dede:type}
复制代码

7 M( C* W/ V- i  帝国CMS中亦可以通过灵动标签SQL语句类似上面织梦那样实现,但我想还是直接放弃吧。上面仅仅是一个这么简单的需求,还不得不写这么大堆SQL语句和PHP代码,其他更复杂的个性化需求怎么办。
0 v( v, T3 [3 {  举个更常见的需求,原来c.html是分在A栏目下的B栏目里的,但是前台整合需要,实现归在C栏目下显示,面包屑导航结构是首页>栏目  D>,(后台栏目分类是一回事,前台整合是另一回事,很多为了实现结构目录扁平化或文章营销性质思量,都有遇到这样的情况),这样的需求,按上面的分析,在PHPCMS下是很方便实现的,那DEDECMS和帝国CMS中估计又得头大。
( D+ l9 H% k7 _  URL结构设置4 I3 T( q/ S# B: ^6 E
  毫无疑问,URL结构的调整,在SEO站内优化中也是常需要考虑到的因素,有时候需要按照栏目目录结构来显示内容的路径,有时候需要把所有内容都只归于一个目录下,因为CMS中自定义URL规则的功能就显得尤为告急了。这点此前落叶的CMS对比分析系列文章中作过详细的分析。效果是:功能上  PHPCMS>DEDECMS>帝国,细节上DEDECMS>PHPCMS>帝国。这里限于篇幅,不再赘述。
# O  O2 O5 a! I
! m& Y2 ]4 J7 r- L            

0

主题

10

帖子

20

积分

1°伸手党

Rank: 2

积分
20
发表于 19-10-8 18:27:30 | 显示全部楼层         
学习了,不错,讲的太有道理了
回复

使用道具 举报

0

主题

7

帖子

4

积分

1°伸手党

Rank: 2

积分
4
发表于 1 小时前 | 显示全部楼层         
帮帮顶顶!!
回复

使用道具 举报

网站简介

球球发,是一家 Discuz! 商业插件、风格模板、网站源码、 Discuz!运营维护技术等于一体的交流分享网站,全站95%的资源都是免费下载,对于资源我们是每天更新,每个亲测资源最新最全---球球发(如果我们有侵犯了您权益的资源请联系我们删除