用Drupal搭建網站中,我們通常是初期導入大量數據,後來再反複修改分類、Views、顯示模闆、菜單等項目來改善用戶體驗,特别是顯示模闆可能會在幾個月、幾年後多次修改,甚至是重要的全面修改,顯示内容已經面目全非了,但搜索引擎的快照中還是以前的内容,沒有及時重新抓取、更新排名。
搜索引擎應該是基本參照網站的xmlsitemap中的頁面最後修改時間lastmod、更新頻率changefreq來決定是否回來抓取、多長時間回來抓取的,而Drupal生成的sitemap中某個頁面的最後更改時間很可能就是當初創建的時間,但顯示内容因為模闆修改而早就不同了,造成修改後的内容無法及時被搜索引擎發現。
這幾天實驗了一下,用一段php程序批量将Drupal頁面的node時間($node->changed、$node->revision_timestamp)修改為當前時間或者比較早的時間後,再重建sitemap(可用drupal菜單rebuild xmlsitemap或者drush xmlsitemap-rebuild),确實可以達到修改sitemap中頁面最後修改時間的目的。
不過用php程序來逐頁修改保存起來比較慢,幾萬個頁面可能要執行上十個小時,今天早上又試了幹脆直接修改數據庫中的表,那執行起來就飛快了,語句記錄如下:
UPDATE `mingluji_com`.`node` SET `changed` = '1357607144' WHERE 1; UPDATE `mingluji_com`.`node_revisions` SET `timestamp` = '1357607144' WHERE 1; UPDATE `mingluji_com`.`xmlsitemap` SET `lastmod` = '1357607144' WHERE `xmlsitemap`.`type` = 'node';
上面三句分别修改node、node_revision和xmlsitemap中node頁面的時間戳,直接修改了第三個表xmlsitemap中的時間後,隻需要更新sitemap(可用drupal 7菜單update xmlsitemap或者drush xmlsitemap-regenerate)就可以得到新生成的sitemap,比rebuild縮短幾個數量級的時間。
另外,大數據量網站的xmlsitemap更新操作可能需要很長時間,會導緻cron運行困難,可以特别修改xmlsitemap模塊設置更新時間為1年、10年,也就是基本上讓cron期間不再進行xmlsitemap更新,而人工或者另外設置定期生成xmlsitemap。
评论2
用Drush來批量修改Sitemap最後修改時間
可以用Drush來批量修改系列網站中的Sitemap最後修改時間:
注意Drupal 6中的node_revisions表在Drupal 7中變成了node_revision。
附工具鍊接:Unix時間戳轉換
$d sql-query "UPDATE 數據庫名稱
$d sql-query "UPDATE 數據庫名稱.node SET changed = '1474819200' WHERE 1;" $d sql-query "UPDATE 數據庫名稱.node_revision SET timestamp = '1474819200' WHERE 1;" $d sql-query "UPDATE 數據庫名稱.xmlsitemap SET lastmod = '1474819200' WHERE xmlsitemap.type = 'node';" $d xmlsitemap-regenerate