php 实现sitemap
生成静态 Sitemap.xml 文件
使用 PHP 生成静态 sitemap.xml 文件,适合内容较少且不频繁更新的网站。以下是一个基础示例:
<?php
$urls = [
'https://example.com/',
'https://example.com/page1',
'https://example.com/page2'
];
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');
foreach ($urls as $url) {
$urlNode = $xml->addChild('url');
$urlNode->addChild('loc', $url);
$urlNode->addChild('lastmod', date('Y-m-d'));
$urlNode->addChild('changefreq', 'weekly');
$urlNode->addChild('priority', '0.8');
}
header('Content-Type: application/xml');
echo $xml->asXML();
file_put_contents('sitemap.xml', $xml->asXML()); // 保存为文件
?>
动态生成 Sitemap
适合动态内容网站,直接从数据库获取 URL 并实时生成:

<?php
// 假设从数据库获取页面数据
$pages = [
['url' => 'https://example.com/', 'updated_at' => '2023-10-01'],
['url' => 'https://example.com/blog', 'updated_at' => '2023-09-15']
];
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');
foreach ($pages as $page) {
$urlNode = $xml->addChild('url');
$urlNode->addChild('loc', $page['url']);
$urlNode->addChild('lastmod', $page['updated_at']);
$urlNode->addChild('changefreq', 'monthly');
$urlNode->addChild('priority', '0.5');
}
header('Content-Type: application/xml');
echo $xml->asXML();
?>
分块处理大型 Sitemap
如果 URL 数量超过 50,000,需分块生成多个文件并通过索引文件管理:
主索引文件 (sitemap-index.xml)

<?php
$sitemaps = [
'https://example.com/sitemap-pages.xml',
'https://example.com/sitemap-posts.xml'
];
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></sitemapindex>');
foreach ($sitemaps as $sitemapUrl) {
$sitemapNode = $xml->addChild('sitemap');
$sitemapNode->addChild('loc', $sitemapUrl);
$sitemapNode->addChild('lastmod', date('Y-m-d'));
}
header('Content-Type: application/xml');
echo $xml->asXML();
?>
子 Sitemap 文件示例 (sitemap-pages.xml)
<?php
$pages = [ /* 从数据库获取部分数据 */ ];
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');
// 添加部分 URL...
?>
自动提交到搜索引擎
生成后可通过 PHP 发送 Ping 请求通知搜索引擎:
$sitemapUrl = urlencode('https://example.com/sitemap.xml');
file_get_contents("http://www.google.com/ping?sitemap=$sitemapUrl");
file_get_contents("http://www.bing.com/ping?sitemap=$sitemapUrl");
注意事项
- 确保 XML 符合标准,可通过 W3C Validator 检查。
- 动态生成时建议缓存,避免频繁查询数据库。
- 分块文件需确保每个子文件不超过 50MB 或 50,000 条 URL。






