Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。

目前有两种格式

一.Google SiteMap

<urlset xmlns=“网页列表地址”>
<url>
<loc>网址</loc>
<lastmod>2005-06-03T04:20-08:00</lastmod>
<changefreq>always</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>网址</loc>
<lastmod>2005-06-02T20:20:36Z</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
</urlset>

Google SiteMap

二.百度sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>
<loc>网页地址</loc>
<lastmod>2010-01-01</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urlset>

百度sitemap

XML标签

changefreq:页面内容更新频率。
lastmod:页面最后修改时间
loc:页面永久链接地址
priority:相对于其他页面的优先权
url:相对于前4个标签的父标签
urlset:相对于前5个标签的父标签
我将一句一句分解讲解这个xml文件的每一个标签:
<urlset xmlns="
这一行定义了此xml文件的命名空间,相当于网页文件中的<html>标签一样的作用。
<url>
这是具体某一个链接的定义入口,你所希望展示在SiteMap文件中的每一个链接都要用<url>和</url>包含在里面,这是必须的。
<loc></loc>
用<loc>描述出具体的链接地址,这里需要注意的是链接地址中的一些特殊字符必须转换为XML(HTML)定义的转义字符,如下表: 字符 转义后的字符
HTML字符 字符编码
& 符号 & &amp;
单引号 ' &apos;
双引号 " "
大于 > &gt;
小于 < &lt;
<lastmod>2005-06-03T04:20:32-08:00</lastmod>
<lastmod>是用来指定该链接的最后更新时间,这个很重要。Google的机器人会在索引此链接前先和上次索引记录的最后更新时间进行比较,如果时间一样就会跳过不再索引。所以如果你的链接内容基于上次Google索引时的内容有所改变,应该更新该时间,让Google下次索引时会重新对该链接内容进行分析和提取关键字。这里必须用ISO 8601中指定的时间格式进行描述,格式化的时间格式如下:
年:YYYY(2005)
年和月:YYYY-MM(2005-06)
年月日:YYYY-MM-DD(2005-06-04)
年月日小时分钟:YYYY-MM-DDThh:mmTZD(2005-06-04T10:37+08:00)
年月日小时分钟秒:YYYY-MM-DDThh:mmTZD(2005-06-04T10:37:30+08:00)
这里需注意的是TZD,TZD指定就是本地时间区域标记,像中国就是+08:00了
<changefreq>always</changefreq>
用这个标签告诉Google此链接可能会出现的更新频率,比如首页肯定就要用always(经常),而对于很久前的链接或者不再更新内容的链接就可以用yearly(每年)。这里可以用来描述的单词共这几个:"always", "hourly", "daily", "weekly", "monthly", "yearly",具体含义我就不用解释了吧,光看单词的意思就明白了。
<priority>1.0</priority>
<priority>是用来指定此链接相对于其他链接的优先权比值,此值定于0.0 - 1.0之间
还有</url>和</urlset>,这两个就是来关闭xml标签的,这和HTML中的</body>和</html>是一个道理
另外需要注意的是,这个xml文件必须是utf-8的编码格式,不管你是手动生成还是通过代码生成,建议最好检查一下xml文件是否是utf-8编码,最简单的方法就是用记事本打开xml然后另存为时选择编码(或转换器)为UTF-8。
登陆Google提交你的SiteMap文件,链接,如果还没有注册或者登陆Google,就先用自己的帐号登陆Google,登陆后转到Your Sitemaps状态页面,可以点击那个Add a Sitemap + 跳转到提交页面进行Sitemap文件的提交。建议文件放在你的站点根目录下。给Google提交你的Sitemap URL后可以看见在列表里已存在,不过这时候还没有生效,必须过几个小时后Status栏变成OK表示正式生效,如果不是OK,可以查看Google给出的状态标示解释看看是什么原因。[1] 

生成方法

1.静态在线生成Sitemap网站的网址

新建一个文本文件把代码粘贴进去,然后另存为utf-8格式的文件,文件名为sitemap.xml,然后把这个文件上传到自己网站的对应的根目录下面;

2.若要商城生成动态的sitemap 例如

某东www.jd.com/sitemap.xml

如果是一般商城的,可以从date.php(定时更新页面)入手

shopnc

/**
* 生成sitemap.xml文件
* @return [type] [description]
*/
function _create_sitemap(){
//首页
$index = "<url>";
$index .= "<loc>".SHOP_SITE_URL."</loc>";
$index .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$index .= "<changefreq>always</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$index .= "<priority>1.0</priority>"; //优先权 此值定于0.0 - 1.0之间
$index .= "</url>";
//登录页面
$index .= "<url>";
$index .= "<loc>".SHOP_SITE_URL.DS."index.php?act=login</loc>";
$index .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$index .= "<changefreq>weekly</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$index .= "<priority>0.9</priority>"; //优先权 此值定于0.0 - 1.0之间
$index .= "</url>";
//注册页面
$index .= "<url>";
$index .= "<loc>".SHOP_SITE_URL.DS."index.php?act=login&amp;op=register</loc>";
$index .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$index .= "<changefreq>weekly</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$index .= "<priority>0.9</priority>"; //优先权 此值定于0.0 - 1.0之间
$index .= "</url>";
//app下载页面
$index .= "<url>";
$index .= "<loc>".BASE_SITE_URL.DS."app/index.html</loc>";
$index .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$index .= "<changefreq>weekly</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$index .= "<priority>0.9</priority>"; //优先权 此值定于0.0 - 1.0之间
$index .= "</url>";
//商品分类
$goods_class = Model("goods_class")->getGoodsClassList(array("gc_show"=>1), "gc_id, gc_name");
$gc = "";
foreach($goods_class as $val){
$gc .= "<url>";
$gc .= "<loc>".urlShop("search","index",array("cate_id"=>$val["gc_id"]))."</loc>";
$gc .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$gc .= "<changefreq>weekly</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$gc .= "<priority>0.9</priority>"; //优先权 此值定于0.0 - 1.0之间
$gc .= "</url>";
}
//设计师
$designer_list = Model("designer")->getDesignerList(array("designer_status"=>1), "designer_id, designer_name");
$dl = "";
foreach($designer_list as $val){
$dl .= "<url>";
$dl .= "<loc>".urlDesigner("designer","index",array("d_id"=>$val["designer_id"]))."</loc>";
$dl .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$dl .= "<changefreq>weekly</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$dl .= "<priority>0.9</priority>"; //优先权 此值定于0.0 - 1.0之间
$dl .= "</url>";
}
//设计师资讯
$dnews_list = Model("dnews")->getArticleList(array(), 0);
$dn = "";
foreach ($dnews_list as $val) {
$dn .= "<url>";
$dn .= "<loc>".urlDnews("dnews","detail",array("dnews_id"=>$val["dnews_id"]))."</loc>";
$dn .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$dn .= "<changefreq>weekly</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$dn .= "<priority>0.9</priority>"; //优先权 此值定于0.0 - 1.0之间
$dn .= "</url>";
} //商品列表
$goods_list = Model("goods")->getGoodsOnlineList(array(), "goods_id, goods_name", 0, "goods_id desc", 5000);
$gl = "";
foreach($goods_list as $val){
$gl .= "<url>";
$gl .= "<loc>".urlShop("goods","index",array("goods_id"=>$val["goods_id"]))."</loc>";
$gl .= "<lastmod>". date("Y-m-d")."</lastmod>";//最后更新日期
$gl .= "<changefreq>daily</changefreq>";//更新频率 可选"always", "hourly", "daily", "weekly", "monthly", "yearly"
$gl .= "<priority>0.8</priority>"; //优先权 此值定于0.0 - 1.0之间
$gl .= "</url>";
}
$str = '<?xml version="1.0" encoding="utf-8"?>'."<urlset>".$index.$gc.$dl.$dn.$gl."</urlset>";
@file_put_contents(BASE_ROOT_PATH.DS."sitemap.xml", $str);
}

sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml的更多相关文章

  1. shopnc二次开发(二)

    一般来说二次开发,多数就是修改界面和增加功能这两个需求 先说修改界面 mvc 架构的程序,在界面这里,基本就是调用数据. 常见的界面数据构架有三种 1.是业务端或者是控制端数据驱动界面,基本上是后台输 ...

  2. 基于Django+celery二次开发动态配置定时任务 ( 一 )

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  3. shopnc二次开发(一)

    ---恢复内容开始--- 以前没有怎么接触过shopnc,感觉界面挺漂亮的,不过后来自己需要开发一个电商系统,就顺便参考了下,感觉构架垃圾的一塌糊涂.不过平时做这个系统二次开发的业务比较多,所以简单的 ...

  4. appium-desktop录制脚本二次开发,生成我司自动化脚本

    目的 通过对appium-desktop脚本录制功能进行二次开发,使录制的java脚本符合我司自动化框架要求. 实现步骤 1.增加元素名称的输入框 由于ATK(我司自动化测试框架)脚本中元素是以“ap ...

  5. Harbor 定制页面 和 二次开发指南

    harbor的官方地址:https://github.com/goharbor/harbor 想对Harbor进行二次开发,首先要指定一个harbor的版本,这里我们以Harbor:1.6.2为例: ...

  6. 基于Django+celery二次开发动态配置定时任务 ( 二)

    一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...

  7. shopnc 二次开发问题(一)

    1.关于shopnc商品详情页面多规格抢购,价格显示都是显示的抢购价格问题 路径: data/model/groupbuy.model.php 方法:getGroupbuyInfoByGoodsCom ...

  8. 动态代理学习(二)JDK动态代理源码分析

    上篇文章我们学习了如何自己实现一个动态代理,这篇文章我们从源码角度来分析下JDK的动态代理 先看一个Demo: public class MyInvocationHandler implements ...

  9. shopnc 二次开发 每日签到积分领取

    /* 开始shopnc!!!!! url:xxx.com/index.php?act=index&op=userjf 一个四线城市的半吊子程序员~ 实现:前台模板文件 随便加入<a> ...

随机推荐

  1. 自定义View—坐标系

    一.android默认坐标系 二.View 的 getXxx()的坐标系 三.event的坐标系

  2. hdfs的实现机制和文件系统概念

    1.HDFS的诞生背景: 数据量太大,在一个结点(机器)存不下.所以需要分布式存储,HDFS就是hadoop的分布式文件系统,来存储分布式数据. 2.共享文件系统也是一种分布式存储但有缺点:1.并发差 ...

  3. UVA1589 Xiangqi

    Xiangqi is one of the most popular two-player board games in China. The game represents a battle bet ...

  4. 设置Ubuntu Mysql可以远程链接

    1:修改my.cnf配置文件 $sudo vim /etc/mysql/my.cnf 修改为: bind-address = 0.0.0.0 2:进行授权操作 mysql> grant all ...

  5. VIJOS 1052贾老二算算术 (高斯消元)

    描述 贾老二是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于 {x+y=3 x-y=1} 这样的方程组就束手无策了.于 ...

  6. MLC固态硬盘,与入量是3000次P/E

    固态硬盘是什么,固态硬盘寿命有多长 SSD泛指使用闪存芯片组成的SSD固态硬盘,是使用FLASH闪存颗粒作为存储单元,不再使用传统的机械存储方法,使用模拟的方式虚拟出传统 硬盘存取方式和扇区等,也可以 ...

  7. C# 知识点收集

    1. 数组复制 byte[] source; byte[] dest; int srcOffset = 0; int dstOffset = 0; int count = 10; System.Buf ...

  8. JS中简单的this学习

        我在学习JS初期,在使用this的时候经常出现问题,当然就是在现在,也有一些场景不能很好的明白this到底指代的是什么?看下面一个例子:   var x = 10; var foo = { x ...

  9. 恢复Linux下被误删除的文件(笔记)

    恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [root ...

  10. 【转】PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理

    相对于linux来说,udev还是一个新事物.然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了.udev是什么?它是如何实现的?最近研究Linux设备管理时, ...