php 实现sitemap
生成静态 Sitemap 文件
使用 PHP 动态生成 XML 格式的 Sitemap,适合内容较少的网站。
<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
// 示例 URL 数据(可替换为数据库查询)
$urls = [
['loc' => 'https://example.com/', 'lastmod' => '2023-10-01', 'priority' => '1.0'],
['loc' => 'https://example.com/about', 'lastmod' => '2023-09-15', 'priority' => '0.8']
];
foreach ($urls as $url) {
echo '<url>';
echo '<loc>' . htmlspecialchars($url['loc']) . '</loc>';
echo '<lastmod>' . $url['lastmod'] . '</lastmod>';
echo '<priority>' . $url['priority'] . '</priority>';
echo '</url>';
}
echo '</urlset>';
?>
将代码保存为 sitemap.php,通过访问该文件直接输出 XML。
动态生成分页 Sitemap
适用于大型网站,将 Sitemap 分多文件存储,并通过索引文件管理。
主索引文件(sitemap-index.php)
<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
// 假设有 3 个分页 Sitemap
for ($i = 1; $i <= 3; $i++) {
echo '<sitemap>';
echo '<loc>https://example.com/sitemap-' . $i . '.xml</loc>';
echo '<lastmod>' . date('Y-m-d') . '</lastmod>';
echo '</sitemap>';
}
echo '</sitemapindex>';
?>
分页 Sitemap 示例(sitemap-1.php)
<?php
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
// 从数据库或其他数据源获取分页数据
$urls = [
['loc' => 'https://example.com/page1', 'lastmod' => '2023-10-01'],
['loc' => 'https://example.com/page2', 'lastmod' => '2023-09-20']
];
foreach ($urls as $url) {
echo '<url>';
echo '<loc>' . htmlspecialchars($url['loc']) . '</loc>';
echo '<lastmod>' . $url['lastmod'] . '</lastmod>';
echo '</url>';
}
echo '</urlset>';
?>
自动更新 Sitemap
通过定时任务(如 Cron)或内容更新时触发,重新生成 Sitemap 文件。
<?php
function generateSitemap() {
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
// 从数据库获取所有公开的 URL
$urls = fetchUrlsFromDatabase(); // 自定义函数
foreach ($urls as $url) {
$xml .= '<url>';
$xml .= '<loc>' . htmlspecialchars($url['loc']) . '</loc>';
$xml .= '<lastmod>' . $url['lastmod'] . '</lastmod>';
$xml .= '</url>';
}
$xml .= '</urlset>';
// 保存为静态文件
file_put_contents('sitemap.xml', $xml);
}
// 调用函数生成
generateSitemap();
?>
提交 Sitemap 到搜索引擎
生成后,将 Sitemap 提交到 Google Search Console 或 Bing Webmaster Tools。
- 将
sitemap.xml放置在网站根目录。 - 通过搜索引擎的提交工具手动提交,或在
robots.txt中添加:Sitemap: https://example.com/sitemap.xml
注意事项
- 文件命名:通常使用
sitemap.xml或分页命名如sitemap-1.xml。 - 压缩支持:可生成
sitemap.xml.gz减少带宽消耗。 - 频率限制:避免频繁更新,通常每日或每周一次即可。







