65.9K
CodeProject 正在变化。 阅读更多。
Home

生成带 PHP 的 Google 站点地图

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009年1月8日

CPOL

4分钟阅读

viewsIcon

47940

downloadIcon

1153

一篇演示如何使用 PHP 创建自动更新的 Google 站点地图的文章

引言

这是一小段代码,用于生成与 Google 站点地图(协议版本 0.9)兼容的 XML 站点地图。它可与 Google 网站管理员工具结合使用,以帮助他们索引您的网站,并希望为您带来更多流量。

此代码还演示了如何更改已服务的网页的内容类型(在本例中,如何将 PHP 文件视为 XML 文件。)

背景

Google 使用站点地图来获取有关您网站的信息。它们包含 URL 列表,以及有关文件上次更新时间、更新频率以及页面在您网站上的重要性的信息。如果您的网页没有被非常彻底地链接在一起(出于设计或其他原因),它们可以让 Googlebot(和其他搜索引擎的机器人,我相信)找到通常难以访问的页面。有关文件的更多信息,请参阅 Google 自己的描述。

这些文件可以手动创建,它们只是简单的 XML 文件,协议也已经过充分记录,但如果更改您的网站,或者经常添加新页面(例如,在某些博客中),这可能会变得很麻烦。而且,当您可以使用计算机为您完成时,为什么要手动完成呢。

使用代码 

附加到本文的源代码几乎可以随时使用。您所需要做的就是更改几个变量值,它就会创建站点地图。首先,我将解释如何设置代码。然后,如果您想知道它是如何工作的,我将继续解释。

代码的行为是通过更改以下变量来控制的

// Set this to true to ignore all files beginning with .
$respectUnixHidden = true;
// Modify this to ignore specific files, delimited by ';'
$filesToIgnore = 'sitemap.php;error_log';
// Modify this to ignore all files with specific file extensions,
// delimited by ';'
$extensionsToIgnore = 'xml;css;txt';
// This is added in front of all the found filenames to produce URLs instead
// of local filenames. For example, if $rootUrl is http://www.google.com,
// index.htm will become http://www.google.org.uk/index.htm
$rootUrl = 'http://www.freetools.org.uk/';
  • $respectUnixHidden - 这使得代码忽略以“.”开头的文件。在 Unix 系统上,这些文件被视为隐藏文件,常见的例子包括 .htaccess。您通常不希望 Google 索引这些文件。
  • $filesToIgnore - 这应该设置为一个以分号分隔的特定文件列表,以供忽略。这些可能包括 Sitemap 文件本身,以及日志和类似文件。
  • $extensionsToIgnore - 这允许您忽略所有以特定扩展名结尾的文件。在这种情况下,代码将忽略任何 .xml.css.txt 文件。在此代码中,扩展名定义为文件名中最后一个句点后的部分。
  • $rootUrl - 这应设置为找到站点地图的 URL。它将被标记在列出的每个文件名的开头,以提供完整的 URL。

如果您将修改后的文件副本放入与网站其余部分相同的目录中,它现在应该可以工作,列出未被过滤掉的所有网页的 URL,以及它们的最后修改日期。

注意:此代码将仅列出与代码本身在同一目录中的文件,而不是任何子目录中的任何内容。要解决此问题,您可以在每个子目录中放置一个副本,然后使用站点地图索引文件将它们全部“连接”在一起(参见 Google 的站点地图定义)。或者,您可以修改代码来解决此问题(如果需求量足够大并且我有时间,我将这样做)。如果您这样做,请务必分享。

关注点

定义内容类型

此代码使用的站点地图协议依赖于 XML 文件,这些文件通常具有扩展名 .xml。此代码依赖于 PHP,因此通常必须具有 PHP 扩展名。这可能是一个问题,因为该文件可能未被识别为 XML 文件,即使输出是有效的 XML。事实上,即使您确实有 .xml 扩展名,并且您的服务器设置为将其视为 PHP 文件,这可能仍然不起作用。就服务器而言,您正在向某人发送一个 HTML 页面,这就是它告诉那个人他们正在接收的内容。

这可以通过在文件的 HTTP 标头中设置 Content-Type 来解决。解释标头的性质不在本文的范围内,但可以通过以下行解决此问题

<?php
header("Content-type: text/xml");
?> 

这本质上告诉下载该文件的任何程序,它包含 XML。重要的是,此行出现在发送到客户端的任何内容之前,因为之后它将不起作用。例如,这不起作用

<?php
	echo("Hello World!");
	header("Content-type: text/xml");
?>

这也不起作用

 <?php
	header("Content-type: text/xml");
?>

第二个例子要微妙得多。如果仔细观察,在开头的 php 标签之前有一个空格。这将发送到客户端,导致发送标头为时已晚。这是一个相对常见的,并且极其令人恼火的错误。

历史

  • 1.00 - 初始发布
© . All rights reserved.