WordPress免外掛生成完整站點地圖(sitemap.xml)的php程式碼
前言:站點地圖(sitemap.xml)的作用,相信站長們都有所瞭解,我就不獻寶了。而免外掛生成 sitemap.xml,網路上也早就有了純程式碼生成的方法。
一直以來,張戈部落格都是用 DX-SEO 這個很好用的中文 SEO 外掛生成的 sitemap。今天整理電腦檔案時,看到了以前收藏的生成 sitemap.xml 的 php 指令碼,就隨手開啟看了看,發現這個程式碼只能生成主頁和文章頁的 sitemap。果斷百度了一下,發現網上分享的都大同小異,只有首頁和文章頁。感覺有點缺憾,反正今天也是閒著,就動手改造了一番,讓這個程式碼更加完善,可以同時生成首頁、文章、單頁面、分類和標籤的 sitemap!
一、PHP 程式碼
PHP123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | <?phprequire('./wp-blog-header.php');header("Content-type: text/xml");header('HTTP/1.1 200 OK');$posts_to_show=1000;echo'<?xml version="1.0"encoding |
二、偽靜態
①、Nginx
編輯已存在的 Nginx 偽靜態規則,新增如下規則後(平滑)重啟 nginx 即可:
1 | rewrite^/sitemap.xml$/sitemap.php last; |
②、Apache
編輯網站根目錄的 .htaccess ,加入如下規則:
Shell1 | RewriteRule^(sitemap)\.xml$$1.php |
三、純靜態
此部分內容補充於:2016 年 10 月 24 日程式設計師節
看到很多朋友已經在問這個 sitemap 如何靜態化,加快開啟速度。畢竟每次重新生成絕對是一個耗能大戶,而且還有可能被有心之人拿來作為攻擊入口!
其實,張戈部落格早就已經實現 sitemap.xml 靜態化了,而且在後面的文章中也有提到=>【相關文章】
實現方法有多種,比如在 Nginx 的 fastcgi 快取中取消 xml 檔案的快取遮蔽,或者使用張戈部落格最早使用的 php 生成靜態檔案等。
在這裡,我就分享一個自己一直在用的最簡單的實現方法:Linux 定時任務+wget 定時生成 sitemap.xml
具體實現:將 sitemap.php 放到某個不為人知的目錄,然後定時使用 wget 去請求這個檔案,並將資料儲存為 sitemap.xml 存放到網站根目錄就可以了!比如:
Shell12 | #每天在網站根目錄生成一個sitemap.xml diypath為sitemap.php的實際位置01***wget-O/home/wwwroot/zhangge.net/sitemap.xmlhttp://zhangge.net/diypath/sitemap.php>/dev/null2>&1 |
2017-09-22 補充:如果是啟用了 https 的站點,需要加入 --no-check-certificate 的選項,即:
12 | #每天在網站根目錄生成一個sitemap.xml diypath為sitemap.php的實際位置(針對https網站)01***wget-O/home/wwwroot/zhangge.net/sitemap.xml--no-check-certificate https://zhangge.net/diypath/sitemap.php >/dev/null 2>&1 |
Ps:使用這個方法,注意 sitemap.php 裡面的 require('./wp-blog-header.php'); 要改成 require('../wp-blog-header.php'); 也就是注意相對位置!
如果實在搞不清楚什麼是相對路徑,那麼就用簡單粗暴的方法:將網站根目錄的 sitemap.php 重新命名為一個只有自己知道的 php 檔案,比如 xml.php,然後如下新增任務:
Shell
12 #每天在網站根目錄生成一個sitemap.xml(xml.php為自己重新命名的php檔名稱)01***wget-O/home/wwwroot/zhangge.net/sitemap.xmlhttp://zhangge.net/xml.php>/dev/null2>&1
這樣一來,就解決了 sitemap.xml 是動態資料問題了!
四、文章最後
①、確認無誤之後,已開通 sitemap 許可權的就可以前往百度站長平臺提交了,沒開通許可權的可以傳送申請郵件到百度站長平臺管理員郵箱申請,並且將 sitemap.xml 使用 a 標籤連結在網站底部即可。
②、程式碼使用很簡單,可以根據需要增減內容,比如覺得標籤不應該出現在 sitemap 裡面的,可以將標籤部分的 php 程式碼刪除即可,但一定要注意不要誤刪除結尾的</urlset>標籤。
③、今天,把分類、單頁面及標籤的 sitemap 都整出來了,那開放適配專用 sitemap 的 php 程式碼也就可以繼續完善下了,回頭有時間我會整理總結一篇關於 sitemap 及開放適配的終結篇,敬請期待!