动态拆分站点地图

时间:2013-11-27 04:42:39

标签: php xml sitemap

我已按照此guide创建动态XML站点地图。其中包括从数据库中获取记录&从数据库中的URL生成XML。但我需要扩大这个&只要XML大于10MB或超过50,000个URL,就创建一个站点地图索引。以下是我正在使用的代码。

header ("Content-type: text/xml");
echo ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">

    <? while($current_post = mysql_fetch_array($blogs)) { ?>
      <url>
         <loc><?= $current_post[url]) ?></loc>
         <lastmod><?= gmdate(DATE_ATOM, $current_post[timestamp]) ?></lastmod>
      </url>
   <? } ?>
</urlset>

任何帮助或指南拆分此&amp;当URL数超过50,000或文件大小变大时加入sitemapindex感谢10MB将非常有帮助。谢谢。想象可能将总记录除以50,000将得到所需的sitemap_index文件的数量。但仍然有分裂10MB的麻烦。

2 个答案:

答案 0 :(得分:2)

使用SELECT COUNT(*) FROM table获取记录计数,并输出包含位置(loc)的站点地图索引,例如http://www.domain.tld/sitemap.php?offset=50000。在单个部件请求中使用MySQL语句中的LIMIT子句。

对于动态生成的站点地图中的10MB限制,我建议计算一个元素的最大大小,并将其用作站点地图中记录计数的限制。

我认为这不是一个很好的方法来强制执行10MB限制而不预先生成站点地图文件(cronjob)。在cronjob中,您可以开始生成第一个索引文件并存储您编写的字节/元素数。如果其中一个数字很大,则启动下一个文件。将所有生成的文件存储在一个数组中,使用该数组写入索引文件。

答案 1 :(得分:1)

不是计算0-50000条记录(&amp; next on)需要多少字节,而是应该得到0-30000,一个更安全的限制,一个包含30000个URL的文件大小为5-7 MB。

5-7 MB大小的站点地图是好的,因为它不会使您的服务器过载。 此外,您可以压缩站点地图文件(至少对于Google)。