這是一個輕量級的 PHP 類,用於生成符合 Sitemap 協議 的 XML 文件,並自動更新 robots.txt 和提交搜索引擎。
<?php
require_once 'SitemapGenerator.php';
$sitemap = new SitemapGenerator("https://www.example.com");
// 添加 URL:地址、最後修改時間、更新頻率、優先級
$sitemap->addUrl("https://www.example.com/page1", date('c'), 'daily', '1.0');
$sitemap->addUrl("https://www.example.com/page2", date('c'), 'weekly', '0.8');
$sitemap->addUrl("https://www.example.com/page3", date('c'), 'monthly', '0.5');
// 生成並寫入文件
$sitemap->createSitemap();
$sitemap->writeSitemap(); // 生成 sitemap.xml
// 更新 robots.txt 引用 sitemap
$sitemap->updateRobots();
// 主動提交給搜索引擎(Google、Bing 等)
$sitemap->submitSitemap();
?>
| 方法 | 參數 | 說明 |
|---|---|---|
| __construct | $baseUrl | 網站根 URL,必須包含協議(http/https) |
| addUrl | $loc, $lastmod, $changefreq, $priority | 添加單個 URL,參數對應 sitemap 協議字段 |
| createSitemap | 無 | 生成內存中的 XML 結構 |
| writeSitemap | [$filename] | 寫入文件,默認 sitemap.xml |
| updateRobots | 無 | 在 robots.txt 末尾添加 Sitemap: 指令 |
| submitSitemap | 無 | 向 Google、Bing 發送 ping 請求 |
<?php
// 從數據庫批量獲取 URL
$urls = $db->query("SELECT url, updated_at FROM articles WHERE status=1");
$sitemap = new SitemapGenerator("https://www.example.com");
foreach ($urls as $row) {
$sitemap->addUrl(
$row['url'],
date('c', strtotime($row['updated_at'])),
'weekly',
'0.6'
);
}
// 大站點需分片:每個 sitemap 文件不超過 50,000 條 URL
// 可實現 SitemapIndexGenerator 管理多個分片文件
?>
lastmod 必須符合 W3C Datetime 格式(如 2024-01-15T10:30:00+08:00),date('c') 正好符合。changefreq 可選值:always, hourly, daily, weekly, monthly, yearly, never。priority 範圍 0.0~1.0,首頁通常設為 1.0。配合定時任務(Cron)定期運行此腳本,能保持搜索引擎對網站內容的及時收錄。