1、sitemap XML 介绍
Sitemap 是一种用于帮助搜索引擎发现和索引网站内容的文件。它提供了一种结构化的方式,列出网站的所有页面及其相关信息,如更新时间、优先级和变化频率。通过 Sitemap,搜索引擎可以更高效地抓取网站内容,确保所有重要页面都被索引。
Sitemap 的类型
-
XML Sitemap:
- 最常见的 Sitemap 格式。它使用 XML 格式来列出网站的 URL,并包含每个 URL 的元数据(如上次修改日期、变化频率和优先级)。
-
HTML Sitemap:
- 面向用户的 Sitemap,通常作为网站上的一个页面,列出所有主要页面的链接,帮助用户更方便地导航。
-
RSS/Atom Feeds:
- 通常用于博客或新闻网站,通过 RSS 或 Atom feeds 提供最新内容的更新。
-
视频和图片 Sitemap:
- 专门用于包含视频或图片内容的网站,帮助搜索引擎更好地理解这些多媒体内容。
一个标准的 sitemap XML 文件包含一个根元素 <urlset>,以及多个 <url> 子元素。每个 <url> 元素描述一个单独的 URL,并包含以下子元素:
<loc>: URL 位置
<lastmod>: 上次修改时间
<changefreq>: 变化频率
<priority>: 优先级
以下是一个标准的 sitemap XML 文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2024-05-31</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://www.example.com/about</loc>
<lastmod>2024-05-31</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
<urlset>: 根元素,包含所有 URL 元素。需要包含xmlns属性,指定 sitemap 规范的 XML 命名空间。<url>: 每个 URL 的容器,包含描述该 URL 的子元素。<loc>: 必须的子元素,指定 URL 的完整地址。<lastmod>: 可选的子元素,指定 URL 上次修改的日期。格式为YYYY-MM-DD。<changefreq>: 可选的子元素,指定 URL 可能发生变化的频率。可能的值包括:always,hourly,daily,weekly,monthly,yearly,never。<priority>: 可选的子元素,指定 URL 的优先级,范围为0.0到1.0。1.0表示最高优先级。
2、创建 Sitemap 控制器
确保你的控制器 Sitemap.php 如下所示:
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Sitemap extends Controller
{
public function index()
{
// 获取数据,例如从数据库中获取文章列表
// $articles = Db::name('article')->field('id, title, update_time')->select();
$articles = [
[
'id' => 1,
'title' => 'First Article',
'update_time' => '2024-05-31 12:00:00'
],
[
'id' => 2,
'title' => 'Second Article',
'update_time' => '2024-05-31 13:00:00'
],
[
'id' => 3,
'title' => 'Third Article',
'update_time' => '2024-05-31 14:00:00'
]
];
// 生成 XML 内容
$xmlContent = $this->generateSitemapXml($articles);
// 返回 XML 响应:使用 response() 方法返回 XML 响应,并设置正确的 Content-Type 头。
return response($xmlContent, 200, ['Content-Type' => 'application/xml']);
}
private function generateSitemapXml($articles)
{
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset></urlset>');
$xml->addAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
foreach ($articles as $article) {
$url = $xml->addChild('url');
$url->addChild('loc', url('index/article/detail', ['id' => $article['id']], true, true));
$url->addChild('lastmod', date('Y-m-d', strtotime($article['update_time'])));
$url->addChild('changefreq', 'weekly');
$url->addChild('priority', '0.8');
}
return $xml->asXML();
}
}
3、路由配置
需要配置路由,使得 sitemap.xml 能够正确指向新创建的控制器方法。在 application/route.php 文件中添加路由配置:
<?php
Copy code
use think\Route;
Route::get('sitemap.xml', 'index/Sitemap/index');