多语言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"来标明页面之间的关系。
评论