一步一步学做Discuz!6.1的sitemap

标签:Discuz!, PHP

Discuz!6.1只自带了百度的sitemap,却没有Google的,所以得自己制作,其实参考百度的sitemap生成文件即可(论坛根目录下的sitemap.php)。

第一步:
先来了解sitemap的语法吧,《根据 Sitemap 协议手动创建 Sitemap》这篇文章有介绍:
  1. 创建一个文本文件并将其带 .xml 扩展名保存。
  2. 将以下内容添加到文件顶部:
    <?xml version="1.0" encoding="UTF-8"?>
      <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  3. 将以下内容添加到文件底部:
       </urlset>
  4. 为各网址创建一个条目。 标记 为必需,其余标记为可选。
      <url>
        <loc>http://www.example.com/</loc>
        <lastmod>2005-01-01</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.8</priority>
      </url>
  5. 将 Sitemap 上传到您的网站。 然后使用网站管理员工具将其提交给 Google
也就是构造一个这样的XML就行了,注意文件编码为UTF-8。

第2步:
用php生成sitemap(部分关键代码,参考自《Sitemap for google 绿色免安装修改呜啦版》,并修改使其符合规范):

写文件头:
header("Content-type: application/xml");
$xmlcontent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
        "<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\">\n";
//也可写成[url]http://www.sitemaps.org/schemas/sitemap/0.9[/url]
生成更新内容:
$query = $db->query("SELECT tid, fid, subject, dateline, lastpost
		FROM {$tablepre}threads 
		WHERE dateline > $xmlfiletime AND fid IN (".implode(',', $fidarray).") AND displayorder >= 0
		LIMIT $maxitemnum");
//如果不想限制时间,可把“dateline > $xmlfiletime AND ”去掉
//第一次运行,建议去掉;提交成功后,可以再加上,避免重复提交

//下面是生成论坛首页网址,更新时间和重要程度可以自己设
$xmlcontent .= "<url>\n".
		"        <loc>$boardurl</loc>\n".
		"        <changefreq>monthly</changefreq>\n".
		"        <priority>1.0</priority>\n".
		"</url>\n";

//这里是生成更新帖的网址,注意重要程度不要都设为一样,否则会被Google警告
//如果更新较频繁的话,可以设为<changefreq>hourly</changefreq>
//'Y-m-d\TH:i:s+08:00'中,那个+08:00是时区,请改成你的论坛设置的时区
while($thread = $db->fetch_array($query)) {
		$xmlcontent .= "<url>\n".
				"        <loc>".(!$_DCACHE['settings']['rewritestatus'] ? "{$boardurl}viewthread.php?tid=$thread[tid]" : "{$boardurl}thread-$thread[tid]-1-1.html")."</loc>\n".
				"        <lastmod>".gmdate('Y-m-d\TH:i:s+08:00', $thread['lastpost'] + $_DCACHE['settings']['timeoffset'] * 3600)."</lastmod>\n".
				"        <changefreq>daily</changefreq>\n".
				"        <priority>0.5</priority>\n".
				"</url>\n";
}

$xmlcontent .= "</urlset>";
生成xml文件:

        $utf8_xmlcontent ="\xEF\xBB\xBF".utf8_encode($xmlcontent);        //UTF-8文件头
        if($fp = @fopen($sitemapfile, 'w')) {
                fwrite($fp, $utf8_xmlcontent);
                flock($fp, 2);
                fclose($fp);
然后把这个文件上传到论坛根目录,输入它的URL运行下即可生成sitemap_google.xml。

第3步:
之后就要去Google提交你的sitemap了。
如果你还没有注册Google账号的话,先去注册一个。
然后登录网站管理员工具,填入你的网站域名,并按它的说明进行验证。
验证成功后,在控制台点击你的域名,再点左侧的“Sitemaps”,再点右边的“添加Sitemap”,选择类型为“添加常规网络Sitemap”,输入你的Sitemap地址并确认。
几小时后,即可检查是否成功了。成功后会显示如下的图:


第4步:
之后为百度提交Sitemap。先去后台把百度的Sitemap功能开启。
由于百度没有Sitemap的提交入口,所以只能在robots.txt文件中添加代码,来告诉搜索引擎Sitemap的存放位置。(前提是搜索引擎已经收录了你的网站。)

因为百度和Google的Sitemap格式不同,所以得用索引文件来弄多个Sitemap,可以参考《Sitemap 索引文件》一文。
Sitemap 索引文件的 XML 格式与 Sitemap 文件的 XML 格式非常相似。 Sitemap 索引文件使用以下 XML 标记:
  • <sitemapindex>- 文件头尾的父标记。
  • <sitemap> - 文件中列出的每个 Sitemap 的父标记(<sitemapindex> 的子标记)
  • <loc> - Sitemap 的位置(<sitemap> 的子标记)
  • <lastmod> - Sitemap 的上次修改日期(可选)
有关详情,请参阅 Sitemap 协议
XML Sitemap 索引示例
以下所示为 XML 格式的 Sitemap 索引。 该 Sitemap 索引列出了两个 Sitemap:
<?xml version="1.0" encoding="UTF-8"?>
   <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <sitemap>
      <loc>http://www.example.com/sitemap1.xml.gz</loc>
      <lastmod>2004-10-01T18:23:17+00:00</lastmod>
   </sitemap>
   <sitemap>
      <loc>http://www.example.com/sitemap2.xml.gz</loc>
      <lastmod>2005-01-01</lastmod>
   </sitemap>
   </sitemapindex>

先写一个sitemap的索引文件,注意改成你自己的sitemap地址,我这里分别添加了Google和百度sitemap,然后保存在论坛根目录下(注意保存为UTF-8格式):

<?xml version="1.0" encoding="UTF-8"?>
   <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <sitemap>
      <loc>http://www.keakon.cn/bbs/forumdata/sitemap_google.xml</loc>
   </sitemap>
   <sitemap>
      <loc>http://www.keakon.cn/bbs/forumdata/sitemap.xml</loc>
   </sitemap>
   </sitemapindex>
再修改你的robots.txt,添加一句:
Sitemap: http://www.keakon.cn/bbs/sitemap.xml
把索引文件的网址改成你自己即可。

其余的搜索引擎理论上直接用Google的sitemap提交即可。

目前尚不清楚百度的sitemap.php是怎么自动运行的,如果Google的没法自动运行,可以尝试放在计划任务中。
Google抓sitemap的时间也不清楚,但愿不是手动提交=。=
嘛,明天再看看记录就知道了。

最后是代码,仅供参考,请根据需要修改。

6条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?