首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 實作百度 Sitemap 生成完整教學

     編輯:PHP 綜合知識

前言

站點地圖是搜尋引擎優化(SEO)的關鍵工具,能幫助百度等搜尋引擎更高效地抓取網站內容。本文分享一個基於 ThinkPHP 框架的百度 Sitemap XML 自動生成方案,支援針對最新發布的房源資料動態更新,適合房產、資訊類等高頻更新網站。

核心邏輯解析

程式碼採用兩層時間篩選機制:

  • 昨日新增資料:優先收錄過去 24 小時內發佈的內容,權重設為 0.6,更新頻率設為 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;
}

關鍵優化建議

1. 定時任務自動化

建議配合 Linux crontab 每日凌晨執行,確保 Sitemap 始終反映最新資料:

0 2 * * * /usr/bin/php /path/to/your/index.php Home/Index/sitemapxml

2. 大數據分片處理

若單日新增超過 5 萬筆,需依照 百度官方規範 拆分為多個 sitemap_1.xml、sitemap_2.xml 並建立索引檔 sitemap_index.xml。

3. 進階欄位擴充

可依需求加入 <image:image>、<video:video> 等多媒體標籤,提升圖文/影音內容的收錄機率。

常見問題排查

現象可能原因解決方案
XML 格式錯誤資料含特殊字元(&、<、>)輸出前以 htmlspecialchars() 轉義
百度未收錄Sitemap 未提交或權重過低登入百度站長平台主動提交;提高 priority 值
檔案寫入失敗目錄權限不足確認 sitemap.xml 所在目錄可寫(chmod 755)

結語

這套方案結合 ThinkPHP 的 ORM 操作與原生 XML 組裝,輕量且好維護。實際部署時,請根據業務量級調整分片策略,並定期透過百度站長工具監控收錄狀況,持續優化 SEO 效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved