|
插件發佈 插件名稱:最完美google sitemap for discuzX1.5
插件來源:原創插件
適用版本:Discuz! X1.5
語言編碼:GBK簡體 UTF8簡體 BIG5繁體 UTF8繁體
最後更新時間:2011-04-22
插件作者:bugx
插件簡介:google sitemap for dzX1.5生成器加強版 release
特點:
1、計劃任務文件生成google sitemap。每天定時生成,也可以每小時生成
2、可生成門戶文章,論壇帖子,個人主頁,日誌頁面,群組頁面
3、只支持偽靜態頁面。(我想不做偽靜態的1.5也不需要sitemap了吧)
4、支持門戶,論壇,群組,家園自定義域名
5、支持,文章,帖子,主頁。群組的自定義偽靜態頁面
6、定時增量生成sitemap,無需全部生成一次。
7、增量不增文件,不產生多餘的文件,不出現重複頁面(如果沒有子域名,會有每個欄目首頁的重複一次,這個自己註釋掉即可,問題不大)。
8、支持定義每頁生成的數量。
9、支持斷點生成地圖,出現錯誤,修正後繼續生成。
10、支持自定義生成目錄(有的網站非常多的記錄數,在根目錄生成太多的文件,很不美觀。也不方便管理。對安全性設置也不好)
安裝:
只有一個文件,先打開文件配置下參數
/*用戶自定義配置開始*/
//如果你改動過參數,請刪除網站地圖目錄下所有的地圖文件以及data下sitemap.log文件。重新生成一次。
$sm_step=2000; //單次執行次數,根據自己需要修改
$bbs_page="thread"; //bbs的靜態頁面規則,默認thread-xxx-1-1.html格式
$portal_page="article";//portal靜態頁面規則,默認為article-xx-1.html格式
$home_page="space";//用戶個人主頁靜態頁面規則,默認為space-uid-xxxxx.html
$group_page="group"; //群組靜態頁面規則,默認group-{fid}-{page}.html
$sitemap_path="/data/sitemap/";//sitemap的XML文件保存的路徑,文件夾需要自己建立
由於google的sitemap裡的網址不允許包含上級目錄的地址,所有建議大家放在根目錄。
/*用戶自定義配置結束*/
上傳到source\include\cron目錄下。
ftp上建好sitemap的生成目錄,並給予可寫權限。默認根目錄
添加一個計劃任務,取名為 「google地圖任務」。編輯這個任務,任務腳本裡寫 cron_sitemap.php(這個文件名不可更改)
設置好運行時間。
第一次運行,最好手工執行一下。先把老的數據生成。
程序會在data目錄下生成一個日誌文件sitemap.log,不可隨意刪除。
生成完成後,生成4個索引sitemap
portal_sitemap.xml
forum_sitemap.xml
home_sitemap.xml
group_sitemap.xml
把這4個索引文件根據你的域名分配提高到各自的站點工具下,(切記,不然會出現google的警告錯誤)
可以編輯robot文件
在最後添加寫入讓搜索引擎自動找到你的sitemap
Sitemap: http://論壇域名/forum_sitemap.xml
Sitemap: http://群組域名/group_sitemap.xml
Sitemap: http://家園域名/home_sitemap.xml
Sitemap: http://門戶域名/portal_sitemap.xml
由於data目錄是被robot禁止的,默認路徑改為/sitemap/
更改索引文件為sitemap.xml
修正索引文件中無效的域名頁面,去除了sitemap.xml本身被包含的錯誤(10:31分之前的一個文件有錯誤)
21:40分最後更新
將一個整合的sitemap分成4個子域名分別的獨立sitemap。避免提交錯誤
將默認路徑改為根目錄,解決google提交的錯誤。
經過測試提交到google,50多萬頁面很完美被收錄,沒有再提示錯誤。
後記:
經過我觀察發現,baidu是兼容這種sitemap的。在百度中,我的家園日誌收錄「找到相關網頁約141,000篇」
以前的情況,日誌是很難收錄的。但是把sitemap寫入到robot和做到網站鏈接上,這個收錄非常明顯的改善了。
但是問題在於百度有時候亂收入鏈接,明明將/space.php*寫入到robot裡,還是會收錄這種動態的鏈接。
這個改為/space.php?uid=*後不知道會不會好一些。繼續觀察。
有人碰到一種問題,就是生成的sitemap在的,而4個索引文件為空,那麼2種可能性。
1、前面你已經下載過這個插件,運行過一次了。刪除data/sitemap.log文件,重新執行下即可
2、PHP低於5.0 或者為了安全禁用了scandir函數。
替換方法
在文件最下面增加一個函數
- $dh = opendir($dir);
- while (false !== ($filename = readdir($dh))) {
- $files[] = $filename;
- }
- sort($files);
- rsort($files);
- return $files;
- }
複製代碼
在398行左右
- $arrfiles=scandir(DISCUZ_ROOT.$sitemap_path);
複製代碼
用這個函數替換scandir即可。
有些人需要把生成的文件放到一個目錄下的。需要通過rewrite來解決
- nginx下的規則如下
- rewrite "^/(forum|group|home|portal)_sitemap\.xml$" /sitemap/$1_sitemap.xml last;
- rewrite "^/([a-z]+)_sitemap_([0-9]+)\.xml$" /sitemap/$1_sitemap_$2.xml last;
- apache下未測試,應該和nginx相差不大
- RewriteRule ^/(forum|group|home|portal)_sitemap\.xml$ /sitemap/$1_sitemap.xmlRewriteRule ^/([a-z]+)_sitemap_([0-9]+)\.xml$ /sitemap/$1_sitemap_$2.xml
複製代碼 或者
- RewriteRule ^(.*)/(forum|group|home|portal)_sitemap\.xml$ $1/sitemap/$2_sitemap.xmlRewriteRule ^(.*)/([a-z]+)_sitemap_([0-9]+)\.xml$ $1/sitemap/$2_sitemap_$3.xml
複製代碼 然後在根目錄下建立一個sitemap的文件夾
配置
$sitemap_path="/sitemap/"
代碼中找到
- if (strstr($arrfiles[$key],"portal_")) 下面
- $loc_portal="http://".$portal_url.$sitemap_path.$arrfiles[$key];
- 改為$loc_portal="http://".$portal_url.'/'.$arrfiles[$key];
複製代碼 下面4個同理修改。
測試通過
|
|