当前位置

Drupal网站手机版的站点地图Mobile XML Sitemap

James Qi 在 2012年6月4日 - 17:07 提交
内容摘要:近期集中为以前的一些网站添加了手机版,为了让搜索引擎优化的效果更佳,我们为手机版都添加了Mobile XML Sitemap,在MediaWiki网站中是逐一对电脑版中的地图文件进行人工修改保存,而在......

  近期集中为以前的一些网站添加了手机版,为了让搜索引擎优化的效果更佳,我们为手机版都添加了Mobile XML Sitemap,在MediaWiki网站中是逐一对电脑版中的地图文件进行人工修改保存,而在Drupal网站中我们采用的办法是自动实时转换,下面记录几个要点:

  • 在设置手机版网站的时候sites/m.example.com/files目录可以做一个软链接到对应的电脑版sites/www.example.com/files目录,这样手机版就可以找到对应的站点地图文件;
  • 这个找到的站点地图内容却是电脑版的,需要进行转换,我的办法是修改sites/all/modules/xmlsitemap/xmlsitemap.page.inc来实现,具体代码在后面;
  • 修改后的xml sitemap有可能超过10M的大小限制,可以采取预先设置电脑版站点地图每个最多包含2.5万的办法来解决;
  • 修改成功后,可以修改robots.txt来告知搜索引擎新的站点地图URL,并到Google Webmaster Tools、百度站长平台中主动添加网站、提交地图。

  xmlsitemap.page.inc中修改的代码:

/*
    while (!feof($handle)) {
      print fread($handle, 1024*16);
    }
*/
//jamesqi 2012-5
$content="";
while (!feof($handle)) {
  $content.=fread($handle, 1024*16);
}
    fclose($handle);

$server=$_SERVER['SERVER_NAME'];
switch ($server) {
case 'm.114.mingluji.com':
  $source='114.mingluji.com';
  break;
case 'm.sale.mingluji.com':
  $source='sale.mingluji.com';
  break;
case 'm.goumai.mingluji.com':
  $source='goumai.mingluji.com';
  break;
default:
  $source=$server;
}

if ($source!=$server) {
$content=str_replace("http://$source","http://$server",$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);
}

print $content;

  从上面可以看出,读取硬盘上的xml文件后,先进行了几个替换,然后再输出就符合Mobile XML Sitemap的规范了。

评论

-- 发自IP地址: 59.172.48.29 (位置 | 谁是)

改了一下程序,子域名和子目录两种手机版都支持sitemap变换:

function xmlsitemap_file_transfer($uri, $headers) {
  if (ob_get_level()) {
    ob_end_clean();
  }

foreach ($headers as $name => $value) {
    drupal_add_http_header($name, $value);
  }
  drupal_send_headers();

  // 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')) {
//delete start
/* jamesqi 2012-12-23
    while (!feof($fd)) {
      print fread($fd, 1024*16);
    }
    fclose($fd);
*/
//delete end
//insert start
$content="";
while (!feof($fd)) {
  $content.=fread($fd, 1024*16);
}
    fclose($fd);
$server=$_SERVER['SERVER_NAME'];
$path=$_SERVER['REQUEST_URI'];
if (substr($server,0,2)=='m.') {
  $source=substr($server,2);
  $target=$server;
} elseif (substr($path,0,3)=='/m/') {
  $source=$server;
  $target="$server/m";
} else {
  $source=$server;
  $target=$server;
}
if ($source!=$target) {

	$content=str_replace("http://$source","http://$target",$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);

	}

print $content;
//insert end
  }
  else {
    drupal_not_found();
  }
  drupal_exit();
}

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符