- 1.png
- 之前向谷歌搜索引擎提交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://qaqbuyan.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实现
- 通过上面的要求实现代码,然后根据数据库的文章记录进行输出,这里截取我文章字段的样式图举例
- 2.png
- 根据规范,我们需要取出链接,标题,时间
<?php /* qaq卟言 设计制作 个人介绍 https://qaqbuyan.com:88/关于乔安/ qaq卟言的个人博客 */ //输出头,告诉他们这是一个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://qaqbuyan.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://qaqbuyan.com:88/乔安文章/id.html --> <loc>https://qaqbuyan.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://qaqbuyan.com:88/网站地图/sitemap
- 写好了,重新向谷歌提交
- 3.png
【php实现生成sitemap xml地图】
开始
完结