当前位置

卸载Drupal中的Nodeword模块,改用PHP程序实现Meta数据(包括Keyword, Description等)设置

James Qi 在 2011年2月26日 - 20:33 提交
内容摘要:为了网站的SEO效果更好,需要对页面的Meta数据(例如Keyword, Description等)进行设置,我按照一般用Drupal的网站的办法,加装了Nodeword模块,但用起来似乎不太符合我们......

  为了网站的SEO效果更好,需要对页面的Meta数据(例如Keyword, Description等)进行设置,我按照一般用Drupal的网站的办法,加装了Nodeword模块,但用起来似乎不太符合我们的要求,对于单个页面编辑时分别设定这些参数还是不错的,而我们是需要批量自动设置,并嵌入一些变量。我们在安装了Nodeword后,只能批量设置Meta数据中的Keyword,使用可变的分类关键字和固定的人工设定关键字来组成Keyword,而Description还没有找到办法批量设置。

  另一个我们发现比较麻烦的事情是安装了Nodeword后,MySQL数据库中添加了相应的表,而这些表占用空间极大,每个Node都要新建N条数据库记录,这在页面少的情况下无所谓,但数量多了就有些问题了。例如我们一个Node数量在50万的网站,就会多出一个有300万条记录的表,不仅占用空间,在数据导入、处理、展示的时候肯定都是很消耗资源的。

  于是我们决定改用其他办法,其实也很简单,就是在页面中运行一段很短的PHP程序,例如:

<?php
//添加Meta数据
drupal_set_html_head( "
<meta name='keywords' content='$keyword, $category, AdSense, AdWords, Google,广告,谷歌,联盟,赚钱' />
<meta name='description' content='下面是Google为关键字“ $keyword ”匹配的广告及说明,包括“竞争程度”、“全球每月搜索量”、“本地每月搜索量”和“估算平均每次点击费用”等信息。' /> 
");
?>

  其中$keyword和$category都是变量,这段程序可以放在.tpl.php的模板文件中,或者contemplate的设置中,如果没有变量的话,还可以放在block中。

  这比安装那个Nodeword模块方便多了,还可以实现更多我们需要的功能。我们做好了这个程序后,就可以在MySQL中删除那几个与Nodeword有关的表。


  补充:以上为Drupal 6的写法,Drupal 7的调用函数写法有变化,导致以前的页面无法显示,屏幕输出空白,需要改为:

$keywords = "$keyword, $category, AdSense, AdWords, Google,广告,谷歌,联盟,赚钱";

$description = "下面是Google为关键字“ $keyword ”匹配的广告及说明,包括“竞争程度”、“全球每月搜索量”、“本地每月搜索量”和“估算平均每次点击费用”等信息。";

$meta= "
<meta name=\"keywords\" content=\"$keywords\" /> 
<meta name=\"description\" content=\"$description\" /> 
";
$element = array(
  '#type' => 'markup',
  '#markup' => $meta,
);
drupal_add_html_head($element, 'meta');