php实现生成sitemap xml地图

本文摘自qaq卟言博客。https://qagzs.com:88/乔安文章/43.html
php实现生成sitemap xml地图-qaq卟言个人博客
之前向谷歌搜索引擎提交sitemap,后面发现谷歌使用的是xml不是html,没法使用,于是想在网上要懒人工具爬取生成sitemapxml地图
不要问我,为什么我博客没有xml地图,因为框架功能都是自己写的,没开发这个功能所以这个xml地图但是更新文章的话又要重新爬取上传xml地图,就很不方便,就打算写一个sitemapxml地图,方便搜索引擎提交收录
sitemap的最佳方式是随着内容的变化而变化,当内容变化的时候,sitemap自动重新生成
既然需要生成xml,那就需要知道格式及规范说明

sitemap xml格式

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://qagzs.com:88/</loc>
<lastmod>2020-08-01T00:00:00+08:00</lastmod>
<changefreq>monthly</changefreq>
<priority>1</priority>
</url>
</urlset>

sitemap xml规范

urlset用来标记整个文档的开头,必需
url标记每条信息的开始和结束,必需
loc该条数据的存放地址,最小长度1个字符,最大长度256个字符以http://或者https://开头,必需
lastmod指该条数据的最新一次更新时间,时间格式为ISO8601,可选
changefreq指该条数据的更新频率,有效值为:alwayshourlydailyweeklymonthlyyearlynever,可选
priority用来指定此链接相对于其他链接的优先权比值,此值定于0.0-1.0之间,可选

sitemap xml要求

urlseturlloc都是必需的,另外就是防止乱码需要让XML文件以utf-8编码输出
谈谈其他的一个Sitemap文件包含的网址不得超过5万个,且文件大小不得超过10MB,我们新站可以忽略了,因为自己站点也没有这么多内链

PHP实现

通过上面的要求实现代码,然后根据数据库的文章记录进行输出,这里截取我文章字段的样式图举例
根据规范,我们需要取出链接,标题,时间
php实现生成sitemap xml地图-qaq卟言个人博客

<?php
  /*
  qaq卟言
  设计制作
  个人介绍
  https://qagzs.com:88/关于乔安/
  乔安工作室
  */
  //输出头,告诉他们这是一个xml文件
  header('Content-type: text/xml');
  //输出xml文件的编码为UTF-8以及单独的首页优先级
  echo '<?xml version="1.0" encoding="UTF-8"?> 
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
  <loc>https://qagzs.com:88/</loc>
  <lastmod>2020-08-01T00:00:00+08:00</lastmod>
  <changefreq>monthly</changefreq>
  <priority>1</priority>
  </url>';
  //连接数据库,这里忽略
  //查询数据库,这里未设置try,如果项目使用请加上。以倒序查询文章表
  $sql="select * from writings order by `id` desc";
  $smt=$pdo->prepare($sql);
  $smt->execute();
  $rows=$smt->fetchAll(PDO::FETCH_ASSOC);
  //判断$rows有没有数据
  if(!$rows){echo '<h1 style="color: #7D3C98;">没有数据!</h1>';} 
  //循环输出数据
  foreach($rows as $row){
  if($row['id']==count($rows)){$priority = '0.8';}else{$priority = '0.5';}// 判断是否为最后字段,是设置$priority为0.8,否则设置为0.5
  $row['time'] = new DateTime($row['time']);
  $row['time'] = $row['time']->format(DateTime::ATOM); // 格式化时间为ISO8601
  echo '<url>
  <!-- 输出数据,因为我的文章链接都是以数字id为链接的,所以写入格式为-https://qagzs.com:88/乔安文章/id.html -->
  <loc>https://qagzs.com:88/乔安文章/'.$row['id'].'.html</loc>
  <!-- 输出ISO8601的时间格式 -->
  <lastmod>'.$row['time'].'</lastmod>
  <!-- 输出更新频率默认为monthly就行了 -->
  <changefreq>monthly</changefreq>
  <!-- 输出通过判断$row['id']得到$priority的值 -->
  <priority>'.$priority.'</priority>
  </url>';
  }
  //循环结束,然后断开连接,以及输出脚注
  $pdo = null;
  echo '</urlset>';

如果没有错误,那么输出应该跟后面的链接是一样的https://qagzs.com:88/网站地图/sitemap
写好了,重新向谷歌提交php实现生成sitemap xml地图-qaq卟言个人博客
原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值