面包屑导航在不管在还是在都是极其重要的要素,清晰的内链布局结构对搜索引擎来说能引导蜘蛛顺利抓取全站的内容;对用户来说,可以知道自己所浏览的页面的位置,便于用户进一步点击,贡献PV量。但是对一些中英文站点来说就比较麻烦了,看看中文网站页面标题和面包屑导航结构:
一般三层目录的的页面标题结构是:
文章标题_栏目标题_网站名称
对应的面包屑导航一般是:
首页 > 栏目标题 > 文章标题
三层及以上的标题结构是:
文章标题_三级栏目标题_二级栏目标题_网站名称
对应的面包屑导航一般是:
首页 > 二级栏目标题 > 三级栏目标题 > 文章标题
后面的文章标题可以去掉也可以保留,对来说并不影响。
内容管理系统(CMS)比较多,实现这样的的效果比较容易,但是对中英文网站来说支持度不是很好,很多不会选择两个空间分别装中英文系统,能不能实现在一个空间里实现中英文网站的跳转呢?这里举例织梦dedecms,实现动态网站做伪静态并做好如上标题和面包屑导航。介绍两种笔者试验成功的方法:
实现方法简单粗暴,全部采用动态页面伪静态的方法,让空间占用最小,一般企业站的配置不需要太高,访问量也不会很多,节约了服务器和维护的成本。适合2-4层目录结构的站点。
数据库安装方法
中英文网站安装方法就不具体说明了,一个安装在服务器空间的根目录,另外一个安装在子目录里,共享空间但数据库内容不一样,比如根目录的数据库前缀为“dede_”,子目录的数据库前缀为“dede2_”。
子目录和子域名跳转
比如中文域名为:www.vi586.com,英文域名为二级域名:en.vi586.com,用户访问http://en.vi586.com相当于访问子目录http://www.vi586.com/en,对于用户来说这样的路径更清晰,百度蜘蛛也认为这是一个子站点,给予的权重相对比子目录要高。
实现子域名解析到子目录的方法参考文章《万网利用.htaccess完美实现子域名跳转到子目录》。
按照上面的方法可以实现子域名解析到子目录并成功跳转,但是会发现这样的权重会更分散,因为子域名所有的链接都是类似
<a href="http://www.xiuzhanwang.com/en/a/>频道名称或文章标题</a>
而我们想实现的如下的效果,才能把权重集中。
<a href="http://en.xiuzhanwang.com/a/">频道名称或文章标题</a>
最完美实现方法由于篇幅限制,请移步文章《》。
面包屑导航设置注意
英文站点的设置方法跟中文的一样,只需要把中文换成英文的就好,面包屑导航也可以使用{dede:field name='position'/},但是“首页”还是中文的修改方法是:系统-系统基本参数-主页链接名,改为“HOME”,
英文站点的面包屑导航结构是:
HOME > CHANNEL > TITLE
标题设置
对应的标题结构是:
TITLE_CHANNEL_WEBNAME
一个空间安装实际上就是让英文站成为一个子频道,选用合适的模板就行,由于中英文都需要用到面包屑导航和页面标题,设置方法稍微麻烦些,而且对百度蜘蛛来说也分不清这是子网站还是子目录,特别是动态网站来说,路径是硬伤,不能做到上面的方法用.htaccess重写,如果只是展示不考虑优化的话可以禁止蜘蛛抓取,而且不能用动态网站的方法,否则又要写正则表达式。
标题设置,修改次级栏目title的斜杠符号"/"
有站长担心"/"会让蜘蛛认为这是子目录的意思,其实在标题权重中,符号是不影响的,只是给人看起来不一样而已。也比较少见如"#","^","$"之类的,较常用的还是"_","-","|",如果为三层结构,列表页一般显示如下,不是我们想要的效果
TITLE / CHANNEL2 / CHANNEL1_WEBNAME
打开/include/arc.listview.class,找到
$this->Fields['title'] = ereg_replace("[<>]"," / ",$this->TypeLink->GetPositionLink(false));
修改为
$this->Fields['title'] = ereg_replace("[<>]"," - ",$this->TypeLink->GetPositionLink(false));
注意横线“-”两边还有两个空格,可以根据需要删除,建议采用竖线符号“|”,因两个栏目之间还有无法删除的空格。
文章标题 | 二级栏目 | *栏目_网站名称
*过三层目录结构请继续往下读。
修改链接符号"/"的另一种方法
如果你懒得修改源文件,也可以用php对{dede:field name='title'/}进行替换:
<title>{dede:field name='title' function='str_replace("|","/",@me) '/}{dede:global.webname/}</title>
面包屑导航设置
{dede:field name='position'/},列表页或内容页,一般显示如下,很显然不是我们想要的效果
首页 > en > channelname > articlename
网上有直接修改position的,但是对于中英文站都需要用的标签,还不能采用直接修改的方法,只有直接调用频道咯。
如果是二层目录结构的网站就简单了,但是四级以上栏目调用可就伤脑筋了,特别是英文站放在子目录里,当然为了蜘蛛顺利抓取,不建议大家网站结构*过三层(包括文章层)。
网上有用sql的方法,但是觉得不灵活,万一别人修改了数据库呢!这里用到一个标签:{dede:channel type='parent'}[field:typename/]{/dede:channel},当然需要自己动手了
打开/include/taglib/channel.lib.php,找到
else if($type=='self') { if($reid==0) return ''; $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath From `dede_arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit 0, $line "; }
在下面增加
else if($type=='parent') { $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath From `dede_arctype` where id='$reid' AND ishidden<>1 order by sortrank asc limit 0, $line "; }
当英文站作为二级栏目时,三级栏目调用栏目名和链接的完整面包屑如下:
<a href="https://www.zhangjunsem.com/{dede:type typeid='英文站栏目的id'}[field:typeurl/]{/dede:type}">HOME > {dede:type typeid='英文站二级栏目id'}<a href="https://www.zhangjunsem.com/[field:typeurl/]">[field:typename/]</a> > {dede:type}[field:typename/]{/dede:type}</a>
四级栏目调用各栏目名和链接的完整面包屑代码如下:
<a href="https://www.zhangjunsem.com/{dede:type typeid='英文站栏目的id'}[field:typeurl/]{/dede:type}">HOME > {dede:type typeid='英文站二级栏目id'}<a href="https://www.zhangjunsem.com/[field:typeurl/]">[field:typename/]</a>{/dede:type}{dede:channel type='parent' }{/dede:channel} > <a href="https://www.zhangjunsem.com/{dede:type}[field:typeurl/]{/dede:type}">{dede:type}[field:typename/]{/dede:type}</a>