生成带 PHP 的 Google 站点地图





0/5 (0投票)
一篇演示如何使用 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 - 初始发布