站點地圖是搜尋引擎優化(SEO)的關鍵工具,能幫助百度等搜尋引擎更高效地抓取網站內容。本文分享一個基於 ThinkPHP 框架的百度 Sitemap XML 自動生成方案,支援針對最新發布的房源資料動態更新,適合房產、資訊類等高頻更新網站。
程式碼採用兩層時間篩選機制:
always。首頁單獨列出,權重最高(0.9),確保網站入口優先被索引。
function sitemapxml() {
$user = M('sethouse'); // ThinkPHP 資料模型
$today = date("Y-m-d", time());
$yesterday = mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
$lastweek = strtotime("-1 week");
$link = M();
// 讀取昨日與近一週的有效房源
$yesterdayArr = $link->query("select * from pre_sethouse where status=1 and time > $yesterday");
$lastweekArr = $link->query("select * from pre_sethouse where status=1 and time > $lastweek");
$url = "https://www.xxx.com/House/housecontent/id/";
foreach ($yesterdayArr as $k => $v) {
$data_array[$k]['loc'] = $url . $v['hid'];
$data_array[$k]['lastmod'] = $today;
$data_array[$k]['changefreq'] = 'always';
$data_array[$k]['priority'] = '0.6';
$data_array[$k]['data'] = '<display></display>';
}
// 組裝 XML 結構
$content = '<?xml version="1.0" encoding="UTF-8"?><urlset>' . chr(13);
// 首頁優先收錄
$content .= '<url>
<loc>https://www.xxx.com</loc>
<lastmod>' . $today . '</lastmod>
<changefreq>always</changefreq>
<priority>0.9</priority>
<data><display></display></data>
</url>' . chr(13);
foreach ($data_array as $data) {
$content .= create_item($data);
}
$content .= '</urlset>';
// 寫入檔案
$fp = fopen('sitemap.xml', 'w+');
fwrite($fp, $content);
fclose($fp);
}
function create_item($data) {
$item = "<url>\n";
$item .= "<loc>" . $data['loc'] . "</loc>\n";
$item .= "<lastmod>" . $data['lastmod'] . "</lastmod>\n";
$item .= "<changefreq>" . $data['changefreq'] . "</changefreq>\n";
$item .= "<priority>" . $data['priority'] . "</priority>\n";
$item .= "<data>" . $data['data'] . "</data>\n";
$item .= "</url>\n";
return $item;
}
建議配合 Linux crontab 每日凌晨執行,確保 Sitemap 始終反映最新資料:
0 2 * * * /usr/bin/php /path/to/your/index.php Home/Index/sitemapxml
若單日新增超過 5 萬筆,需依照 百度官方規範 拆分為多個 sitemap_1.xml、sitemap_2.xml 並建立索引檔 sitemap_index.xml。
可依需求加入 <image:image>、<video:video> 等多媒體標籤,提升圖文/影音內容的收錄機率。
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| XML 格式錯誤 | 資料含特殊字元(&、<、>) | 輸出前以 htmlspecialchars() 轉義 |
| 百度未收錄 | Sitemap 未提交或權重過低 | 登入百度站長平台主動提交;提高 priority 值 |
| 檔案寫入失敗 | 目錄權限不足 | 確認 sitemap.xml 所在目錄可寫(chmod 755) |
這套方案結合 ThinkPHP 的 ORM 操作與原生 XML 組裝,輕量且好維護。實際部署時,請根據業務量級調整分片策略,並定期透過百度站長工具監控收錄狀況,持續優化 SEO 效果。