生成多sitemap文件
Thinkphp生成多sitemap文件
我们知道sitemap对于seo的重要性,很多介绍只生成一个文件sitemap.xml ,但是如果网站内容比较多,就要生成多个sitemap文件,因为搜索引擎对sitemap文件大小和条数有限制,比如google对每个sitemap文件的限制为5万条数据。
何为多sitemap文件机制? 首先我们生成一个主sitemap文件,此文件为sitemapindex类型,其中存放子sitemap文件的路径。子sitemap文件用来存放具体文章item. 这里我们假定每个子sitemap存放网址数为10000个。则代码如下(这里用的thinkphp框架,原理都是一样的):
class SitemapAction extends Action {
//生成sitemap
public function create() {
$page_size = 10000; //每页条数
$bp_db = M('BaobeiProducts');
//1w个地址生成一个子地图,判断需要生成几个?
$count = $bp_db->where('status = 1')->count();
$page_count = ceil($count/$page_size); //分几个文件
$this->create_index($page_count); //生成主sitemap
$this->create_child($page_count,$page_size); //生成子sitemap
$this->success('地图生成成功');
}
//生成主sitemap
protected function create_index($page_count) {
$content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<sitemapindex xmlns=\" http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n";
for($i=1;$i<=$page_count;$i++) {
$content .="<sitemap>\r\n<loc> http://HOST/sitemap/sitemap".$i.".xml</loc>\r\n<lastmod>".date('Y-m-d')."</lastmod>\r\n</sitemap>";
}
$content .= "</sitemapindex>";
$file = fopen("sitemap.xml","w");
fwrite($file,$content);
fclose($file);
}
//生成子sitemap
protected function create_child($page_count,$page_size) {
for($i=0;$i<$page_count;$i++) {
$list = M('BaobeiProducts')->field('id,m_time')->order('id asc')->limit($i*$page_size.','.$page_size)->select();
$sitemap = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n";
foreach($list as $k=>$v){
$sitemap .= "<url>\r\n"."<loc>http://HOST/baobei/".$v['id']."</loc>\r\n"."<priority>0.6</priority>\r\n<lastmod>".date('Y-m-d',$v['m_time'])."</lastmod>\r\n<changefreq>weekly</changefreq>\r\n</url>\r\n";
}
$sitemap .= '</urlset>';
$file = fopen("sitemap/sitemap".($i+1).".xml","w");
fwrite($file,$sitemap);
fclose($file);
}
}
}
生成多sitemap文件的更多相关文章
- sitemap 文件的生成 sitemap文件和sitemapindex 索引文件的生成
<?php /*****连接数据库 start*******/ $dbhost = "localhost"; $username = "root"; $u ...
- 网站SEO优化之添加Sitemap文件。
Sitemap.xml 故名思意就是站点地图文件,可以指引Google spider 收录相应网页.正确地使用Google Sitemap,可以确保让Google spider 不遗漏网站内的任何页面 ...
- 比较ASP生成静态HTML文件的几种方法
将动态页面转换生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录(特别是对接受动态参数的页面).前台访问时,脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度. 当然,凡事 ...
- C# 如何生成CHM帮助文件
原文:C# 如何生成CHM帮助文件 前一段时间应公司要求,让我开发一个数据库字段信息CHM帮助文件生成软件.结果当时我就二了,这个东西我只用过,不知道咋做啊.没想到老大很随意说一句:"没事, ...
- 创建Sitemap文件供搜索引擎使用
以下内容转载自 http://www.cnblogs.com/webtrados/archive/2009/12/29/1635305.html 如何创建Sitemap文件 Sitemap的格式有XM ...
- dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性
dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性 分类: Java2011-06-03 16:14 976人阅读 评论(0) 收藏 举报 xml扩展语言 今天在开发sitemap地 ...
- 用php生成一个excel文件(原理)
1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...
- node使用xml-writer生成本地XML文件实例
npm中xml-writer文档的链接地址:https://www.npmjs.com/package/xml-writer npm中的文档比较简单,而且生成本地xml文件的demo并不正确.本篇是对 ...
- 自动生成build.xml文件
使用Eclipse 自动生成 Ant的Build.xml 配置文件,选择要生成Build.xml文件的项目,鼠标右键, Export-> General -> Ant Buildfiles ...
随机推荐
- Coursera台大机器学习课程笔记4 -- Training versus Testing
这节的主题感觉和training,testing关系不是很大,其根本线索在于铺垫并求解一个问题: 为什么算法PLA可以正确的work?因为前面的知识告诉我们,只有当假设的个数有限的时候,我们才 ...
- Linux 常用服务总结
使用linux有一段时间了,把自己在身边经常听到,使用linux经常遇到的linux常见服务总结出来,这样遇到问题会有更多的解决问题的办法,听别人摆这些专业术语时,才不会不知所云. 服务: 1.NFS ...
- Arduino蓝牙模块实现通信
蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接 2.led指示蓝牙连接状态,闪烁表示没有 ...
- Mysql复合索引
当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致
- yii2得到的数据对象转化成数组
yii2得到的数据对象转化成数组需要用到asArray().1.Customer::find(['id' => $id])->asArray()->one();2.$model = ...
- ASP.NET 前后台调用方法
Asp.Net中几种相似的标记符号: <%=...%>< %#...%>< %%>< %@ %>解释及用法 答: < %#... %>:是在 ...
- sync
tools-android-Sync Project ---------------- file-Project Structure add dependencies
- select change下拉框改变事件 设置选定项,禁用select
select change下拉框改变事件 设置选定项,禁用select 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...
- 巧用margin/padding的百分比值实现高度自适应(多用于占位,避免闪烁)
本文依赖于一个基础却又容易混淆的css知识点:当margin/padding取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素的width为参照物的!也许你会说, ...
- UITableViewCell内放置复杂结构的subview,但subview中的Button不响应点击事件
原因可能是subview的frame没设置或者不对,这种情况下subview的内容依然正常显示,但是无法接收点击响应的消息. 具体来说就是缺少了下面这句代码: // subview - (id)ini ...