本文摘自qaq卟言博客。https://qagzs.com:88/乔安文章/43.html
之前向谷歌搜索引擎提交sitemap
,后面发现谷歌使用的是xml
不是html
,没法使用,于是想在网上要懒人工具爬取生成sitemap
的xml
地图
不要问我,为什么我博客没有xml
地图,因为框架功能都是自己写的,没开发这个功能所以这个xml
地图但是更新文章的话又要重新爬取上传xml
地图,就很不方便,就打算写一个sitemap
的xml
地图,方便搜索引擎提交收录
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
指该条数据的更新频率,有效值为:always
、hourly
、daily
、weekly
、monthly
、yearly
、never
,可选
priority
用来指定此链接相对于其他链接的优先权比值,此值定于0.0-1.0之间,可选
sitemap xml要求
urlset
,url
,loc
都是必需的,另外就是防止乱码需要让XML
文件以utf-8
编码输出
谈谈其他的一个Sitemap
文件包含的网址不得超过5万个
,且文件大小不得超过10MB
,我们新站可以忽略了,因为自己站点也没有这么多内链
PHP实现
通过上面的要求实现代码,然后根据数据库的文章记录进行输出,这里截取我文章字段的样式图举例
根据规范,我们需要取出链接,标题,时间
<?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
写好了,重新向谷歌提交
原文链接