多語言Drupal網站的站點地圖有一個名為xmlsitemap_i18n (XML sitemap internationalization)的插件,安裝後就可以用為網站添加、生成各種語言相應的xmlsitemap,這個功能很強,特别是對于各種語言版本有不同的網址、不同的内容、不同的頁面數量的複雜情況,都可以适用。
但我們在實際使用中,因為網站的數據量大(頁面數達到幾十萬甚至上百萬)、語言多(50種語言)、子網站多(一個系列可能有幾十甚至幾百個子網站),生成站點地圖需要很長時間,而我們網站的多語言沒有頁面數量不同的情況,每個頁面的每種語言都有一一對應的頁面,生成的站點地圖其實隻有網址中語言代碼部分的不同。
想到我曾經寫過《Drupal網站手機版的站點地圖Mobile XML Sitemap》,就是修改xmlsitemap.page.inc程序來實現自動變換出手機版站點地圖的,今天就嘗試也用類似辦法自動變換生成多語言版本站點地圖,經過調試可以成功,代碼如下:
// Attempt to increase time to transfer file. drupal_set_time_limit(240); $scheme = variable_get('file_default_scheme', 'public'); // Transfer file in 16 KB chunks to save memory usage. if ($scheme && file_stream_wrapper_valid_scheme($scheme) && $fd = fopen($uri, 'rb')) { //删除内容的開始行 /*jamesqi 2013-8-15 去掉以前的部分,替換成後面的4個步驟 while (!feof($fd)) { print fread($fd, 1024*16); } fclose($fd); */ //删除内容的結束行 //添加内容的開始行 //步驟1:讀取到變量 $content=""; while (!feof($fd)) { $content.=fread($fd, 1024*16); } fclose($fd); //步驟2:手機版變換 global $base_url; if (substr($base_url,7,2)=='m.') { $source=substr($base_url,0,7).substr($base_url,9); } elseif (substr($base_url,-2)=='/m') { $source=substr($base_url,0,-2); } else { $source=$base_url; } if ($source!==$base_url) { $content=str_replace($source,$base_url,$content); $content=str_replace('<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">','<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0">',$content); $content=str_replace('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0">',$content); $content=str_replace('</url>','<mobile:mobile/></url>',$content); } //步驟3:多語言變換 global $language; $langcode=$language->language; if ($langcode!=='en') { $content=str_replace("$base_url","$base_url/$langcode",$content); } //步驟4:輸出變量 print $content; //添加内容的結束行 } else { drupal_not_found(); } drupal_exit(); }
從結果看達到預期效果,sitemap的index頁面和實際sitemap頁面都轉換成功,手機版的多語言sitemap也沒有問題,提交到搜索引擎可以正常進行。
對于大數據量網站來說,這個辦法不僅節約了生成時間,也節約了大量磁盤空間。
Google推薦的多語言網站sitemap是在同一個xmlsitemap文件中,請看:《站點地圖:rel="alternate" hreflang="x"》,這個辦法可以标明多語言頁面之間的關系,值得推薦,但考慮到這樣每個頁面需要添加50中語言,一個sitemap文件的尺寸可能擴大50倍,超過規定的10M,所以暫時沒有實行,還是先用上面的辦法來做50種變換。以後可以考慮在頁面中添加rel="alternate" hreflang="x"來标明頁面之間的關系。
评论