巅峰霸主 > 设计开发 > 织梦教程 > sitemap.xml和作sitemap.txt制作方法

dedecms制作sitemap.xml和作sitemap.txt文件后台点击自动生成的方法

时间:2020-12-09 07:26:58  来源:巅峰霸主网  作者:烈火大地 点击:
摘要:sitemap对于SEO优化来说是相当重要的,制作sitemap.xml和作sitemap.xml文件向各搜索引擎提交支持后台点击自动生成,后台创建模板方便管理……

使用xenu等软件来生成sitemap虽然简单,但是也比较麻烦,每次生成之后都要手动上传到服务器上面,而且有些还要针对性的修改,重复的工作很繁琐,利用dedecms“自由列表管理”来创建sitemap.xml文件,每次更新完网站,只需要在后台点击生成一下就可以搞定。

一、创建自由列表增加sitemap.xml

第一步:创建管理列表

进入网站后台,依次展开核心——频道模型——自由列表管理——增加列表。下图所示

图片.png

然后填写字段,如下图所示。

  • 自由列表标题:通用sitemap

  • 列表HTML存放目录:{cmspath},最后生成的sitemap.xml文件放在网站的根目录。

  • 目录默认页名称:把后面的“不使用目录默认主页”对勾选上即可。

  • 命名规则:默认是{listdir}/index_{listid}_{page}.html,为了区分好辨认,修改成{listdir}/sitemapxml{page}.xml,page变量是页码,用于自动分页,网址几十万的网站可能会生成不止一个sitemap文件哦,注意后缀是xml而不是HTML。

  • 列表模板:先去你的模板文件夹里面创建一个比如“sitemapxml.htm”的模板文件,然后点浏览——选择他。

dedecms创建sitemap.xml文件

  • 限定栏目和限定频道:第一次创建时不能设置为“不限”,会无法保存,先随便选择一个,等创建成功了之后再回来修改成“不限”。

  • 每页记录数:50000(设置最大为5万条),只要小于5万都可以,也就是每个sitemap中的网址数量最多有多少条,百度等都规定每个sitemap文件中最多只能有5万条网址,保险起见,可以设置成48000或49000,避免网址超出不被处理。

  • 循环内的单行记录样式(InnerText):什么也不写,把默认的数据全部删除,留空即可

设置完成之后保存;保存成功,再点“更改”,把“限定栏目和限定频道”两项改为不限,然后在保存,到此创建一个sitemap.xml格式的文件就全部完毕了。

第二步:编写模板文件

前面我们创建了一个空的sitemapxml.htm模板,打开这个模板文件,将原来的内容清空(如果有),然后在模板文件里面输入以下代码:

<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>{dede:global.cfg_basehost/}/</loc>
    <lastmod>{dede:arclist row=1 orderby=pubdate}
      [field:pubdate function=strftime('%Y-%m-%d',@me)/]
      {/dede:arclist}</lastmod>
    <changefreq>always</changefreq>
    <priority>1.0</priority>
  </url>
  {dede:channelartlist row='50'}
  {dede:arclist row='48000' orderby='pubdate'}
  <url>
    <loc>[field:arcurl/]</loc>
    <lastmod>[field:pubdate function=strftime('%Y-%m-%d',@me)/]</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.6</priority>
  </url>
  {/dede:arclist}
  {/dede:channelartlist}
  {dede:channelartlist row='50' type='top'}
  <url>
    <loc>{dede:field name='typeurl'/}</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  {/dede:channelartlist}
  {dede:channelartlist row='50' type='son' typeid='1'}
  <url>
    <loc>{dede:field name='typeurl'/}</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  {/dede:channelartlist}
  {dede:channelartlist row='50' type='son' typeid='3'}
  <url>
    <loc>{dede:field name='typeurl'/}</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  {/dede:channelartlist}
</urlset>

说明:

  1. 第3~10行是首页跟网址的更新时间

  2. 第11~20行,输出全站最新的48000条文章的网址,注意这里的4万8千不能再大了,因为后面还有栏目的网址,整个加起来不能超出5万条

  3. 第21~27行,输出所有一级栏目的网址

  4. 第28~41行,输出二级栏目的网址 。typeid=1表示一级分类的栏目ID为1,输出一级分类ID为1的所有二级子栏目;typeid=3表示一级分类栏目ID为3;输出一级栏目ID为3下面的所有二级子栏目。如果有多个二级分类,则按照这个方法循环,要是存在三级分类,依然是指定上一级分类的id进行输出。没有发现可以直接输出全部栏目分类的标签,所以只好用这个方法(如果你知道请评论留言)

改好之后保存,然后在后台里面点“更新”,就可以看到自动为你生成了一个sitemap文件。

第三:某些分类和分类下的文章不需要生成sitemap

对于一般的网站,使用上面的方法就可以很好的完成了,但是有的网站,有些分类或者分类下的文章并不需要提交sitemap,遇到这个情况就需要单独对栏目进行排除了,

打开 /include/taglib/channelartlist.lib.php 文件,找到

$attlist = 'typeid|0,row|20,cacheid|';

修改为:

    // 此处添加了一个所要排除typeid的参数—notypeid
    $attlist = 'typeid|0,row|20,cacheid|,notypeid|0';

找到(大约78行)

        $dsql->SetQuery("SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath 
            FROM `dede_arctype` WHERE $tpsql ORDER BY sortrank ASC LIMIT $totalnum");

在其前面添加

        //否定指定ID
        if($notypeid !=0) {
             $tpsql = $tpsql."and not(id in($notypeid)) ";
        }

模板调用

        {dede:channelartlist typeid ='7' notypeid='8'}

其中notypeid='8′ 中的 8 为 7 的子栏目即生效。
当然notypeid和typeid也可以分开各自使用.
如果没有指定调用某个大栏目的typeid,也可以直接否定不调用的栏目id即可,如下这样:

        {dede:channelartlist row=50 notypeid='142'}

不调用指定栏目或栏目下的文章(参考https://www.dfbazhu.com/qd/dedecms/1607089105.html修改),使用上面的方法修改好,然后就可以使用标签来进行排除了。

排除不需要的分类和分类下的文章,sitemap.xml举例:

<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>{dede:global.cfg_basehost/}/</loc>
    <lastmod>{dede:arclist row=1 orderby=pubdate}
      [field:pubdate function=strftime('%Y-%m-%d',@me)/]
      {/dede:arclist}</lastmod>
    <changefreq>always</changefreq>
    <priority>1.0</priority>
  </url>
  {dede:channelartlist row='50' typeid='1,2,3,4' notypeid='5,6'}
  {dede:arclist titlelen='255' row='48000' orderby='pubdate'}
  <url>
    <loc>[field:arcurl/]</loc>
    <lastmod>[field:pubdate function=strftime('%Y-%m-%d',@me)/]</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  {/dede:arclist}
  {/dede:channelartlist}
  {dede:channelartlist row='50' notypeid='5,6'}
  <url>
    <loc>{dede:field name='typeurl'/}</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  {/dede:channelartlist}
  {dede:channelartlist row='50' type='son' typeid='3' notypeid='8,12'}
  <url>
    <loc>{dede:field name='typeurl'/}</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  {/dede:channelartlist}
</urlset>

说明:

  1. 第3~10行:网站首页

  2. 第11~20行:输出栏目id为1/2/3/4分类下的所有文章,排除栏目id为5和6分类下的所有文章。这里typeid='1,2,3,4'也可以直接省略不写,只写要排除的栏目id也行。

  3. 第21~27行:输出一级栏目并排除分类id为5和6的分类,同样一级二级等栏目需要单独输出。

  4. 第28~34行:输出二级栏目的网址,输出一级栏目id为3下面所有的二级栏目并排除id为8和12的二级栏目。如果有多个二级或三级栏目,使用同样的方法循环输出即可。

二、针对百度专用的xml格式sitemap

上面是通用的适用于所有搜索引擎的sitemap,百度推出了专属的移动sitemap,如果你的网站是自适应或者有专门的移动页面可以向百度提交专门的移动sitemap,只需要改一下设置即可。同样的方法,先创建一个自由列表页,然后把上面的通用sitemap模板里面加入专属的移动sitemap标识即可,开头部分下面第2行代码:

<?xml version="1.0" encoding="UTF-8" ?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/"> 
<url> 
<loc>http://m.example.com/index.html</loc> 
......

然后在每个<loc></loc>后面一行增加百度移动sitemap的标识:

<?xml version="1.0" encoding="UTF-8" ?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/"> 
<url> 
<loc>http://m.example.com/index.html</loc> 
<mobile:mobile type="mobile"/>
<lastmod>2009-12-14</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>

上面第6行代码,即百度移动sitemap专属标识,根据你的网站选择下面的参数来配置。

  1. <mobile:mobile/> :移动网页,只有移动页面没有PC页面

  2. <mobile:mobile type="mobile"/> :移动网页,移动页面

  3. <mobile:mobile type="pc,mobile"/>:自适应网页,PC移动网址不变,页面代码一样

  4. <mobile:mobile type="htmladapt"/>:代码适配,PC移动网址会变,代码也不一样

只有搞定了通用的sitemap,设置专属百度移动sitemap就变得如此简单,只要在通用的模板里面加上专属代码、生成就可以了。

二、TXT格式的sitemap创建

第一步:创建自由列表页

如果创建sitemap.txt格式地图,方法和上面创建通用sitemap一样,先创建一个自由列表页,“自由列表标题”修改成如“通用sitemapTXT”;命名规则要把后缀修改成txt格式,如{listdir}/sitemaptxt{page}.txt;列表模板也需要修改成一个TXT格式的模板名,如sitemaptxt.htm,其他的和创建sitemap.xml文件保持一致即可。

第二步:编写模板代码

打开我们创建的sitemaptxt.htm模板文件,因为TXT格式的sitemap要求是网址数量小于5万条,并且每行一个网址,所以模板中只需要输出网址即可,代码如下:

{dede:global.cfg_basehost/}
{dede:arclist row='48000' orderby='pubdate'}
[field:arcurl/]
{/dede:arclist}{dede:channelartlist row='50' type='top'}
{dede:field name='typeurl'/}
{dede:field name='pubdate' function=strftime('',@me)/}
{/dede:channelartlist}{dede:channelartlist row='50' type='son' typeid='1'}
{dede:field name='typeurl'/}
{dede:field name='pubdate' function=strftime('',@me)/}
{/dede:channelartlist}{dede:channelartlist row='50' type='son' typeid='3'}
{dede:field name='typeurl'/}
{dede:field name='pubdate' function=strftime('',@me)/}
{/dede:channelartlist}{dede:channelartlist row='50' type='son' typeid='8'}
{dede:field name='typeurl'/}

说明:

  1. 第1行:输出网址的域名

  2. 第2~4行,输出最新的全站所有文章网址,因为第2行中row=48000限定了条数,如果超出会分页。

  3. 第4~7行,输出一级栏目的网址,注意第4行,代码逻辑这里的{dede:channelartlist row='50' type='top'}应该换行书写,但是输出结果会出现空行,所以不能换行。第6行输出的是一个空行,没有的话输出的网址不会自动换行,堆在一起的。

  4. 第7~10行,输出二级栏目的网址,指定一级栏目id为1,输出栏目id为1的所有二级分类网址。后面一次类推,每一个大栏目下的小栏目都要指定大栏目的id进行输出。

保存之后,在后台点“更新”即可。

排除不需要的文章和分类,sitemap.txt举例

先按照前面的的方法修改/include/taglib/channelartlist.lib.php文件,然后在sitemaptxt.htm模板文件中使用如下代码:

{dede:global.cfg_basehost/}/
{dede:channelartlist row='50' typeid='1,2,3,4' notypeid='5,6'}
{dede:arclist titlelen='255' row='48000' orderby='pubdate'}
[field:arcurl/]
{/dede:arclist}
{/dede:channelartlist}{dede:channelartlist row='50' notypeid='5,6'}
{dede:field name='typeurl'/}
{dede:field name='pubdate' function=strftime('',@me)/}
{/dede:channelartlist}

第2~6行,调用分类为1/2/3/4分类下的文章,并排除分类id为5和6的分类下面的文章。第6~9行调用全站一级栏目并排除id为5和6的栏目。

执着sitemap相对的难点是栏目的调用,因为并不能使用一个标签把所有的栏目都调出来,所以只能一级一级的往下筛选,循环输出二级三级栏目,这个有点烦,不过一个网站的栏目是有限的,一百个分类算多了吧,在按照一级二级等分类调用其实也没有多少。

特别注意:TXT格式的sitemap其实就是提交一堆网址,但是要保证①每行一个网址,②网址要完整,必须有http(https)前缀,不能出现相对路径如/df/a.html或没有协议部分如www.dfbazhu.com/dm/都是不正确的,③不能出现空行,比如某一行或多行是空的就不正确,④一行中只能有一个网址,所以网址堆在一起是不正确的。以下是百度的说明:

此文本文件需要遵循以下指南:

  1. 文本文件每行都必须有一个网址。网址中不能有换行。

  2. 不应包含网址列表以外的任何信息。

  3. 您必须书写完整的网址,包括 http。

  4. 每个文本文件最多可包含 50,000 个网址,并且应小于10MB(10,485,760字节)。如果网站所包含的网址超过 50,000 个,则可将列表分割成多个文本文件,然后分别添加每个文件。

  5. 文本文件需使用 UTF-8 编码或GBK编码。

上面就是全部关于dedecms制作sitemap的内容了,一般我会制作3个sitemap文件,一个sitemapxml.xml和一个sitemaptxt.txt通用于所有搜索引擎,所有的搜索引擎都可以直接提交这两个,针对百度再设置一个专门的百度移动sitemap:sitemapxmlbd.xml文件,专门生成针对百度的移动sitemap,方法和步骤都在上面。


(责任编辑:陆柏熺)
评价:
用户名: 验证码: 看不清?点击更换


关注站长自媒体 获取更多优质内容

  • 百家号
    百家号
  • 头条号
    头条号
  • 企鹅号
    企鹅号

2019-2021 ©巅峰霸主网 京ICP备12023415号-2
返回
顶部