Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[展示] 一步一步学做Discuz!6.1的sitemap

[复制链接]
keakon 发表于 2008-10-15 16:06:01 | 显示全部楼层 |阅读模式
插件发布
插件名称: Sitemap for google修改版
插件来源:
适用版本: Discuz! 6.1
语言编码: GBK简体 
最后更新时间:
插件作者: 制作:呜啦岛 · 修改:keakon
插件简介: 制作Discuz!6.1的sitemap
本帖最后由 keakon 于 2008-10-15 17:47 编辑

注:由于本人只装过6.1的GBK版本,是否适用于其他版本请自行尝试(不会造成破坏性后果。)

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

演示示例:
http://www.keakon.cn/bbs/sitemap_google.php

第一步:
先来了解sitemap的语法吧,《根据 Sitemap 协议手动创建 Sitemap 》这篇文章有介绍:

  • 创建一个文本文件并将其带 .xml 扩展名保存。
  • 将以下内容添加到文件顶部:
    <?xml version="1.0" encoding="UTF-8"?>
      <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  • 将以下内容添加到文件底部:
       </urlset>
  • 为各网址创建一个条目。 标记 为必需,其余标记为可选。
      <url>
        <loc>http://www.example.com/<;/loc>
        <lastmod>2005-01-01</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.8</priority>
      </url>
  • 将 Sitemap 上传到您的网站。 然后使用网站管理员工具将其提交给 Google

也就是构造一个这样的XML就行了,注意文件编码为UTF-8。

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

写文件头:

  1. header("Content-type: application/xml");
  2. $xmlcontent = "<?xml version="1.0" encoding="UTF-8"?>\n".
  3.         "<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">\n";
  4. //也可写成http://www.sitemaps.org/schemas/sitemap/0.9
复制代码
生成更新内容:

  1.         $query = $db->query("SELECT tid, fid, subject, dateline, lastpost
  2.                 FROM {$tablepre}threads
  3.                 WHERE dateline > $xmlfiletime AND fid IN (".implode(',', $fidarray).") AND displayorder >= 0
  4.                 LIMIT $maxitemnum");
  5. //如果不想限制时间,可把“dateline > $xmlfiletime AND ”去掉
  6. //第一次运行,建议去掉;提交成功后,可以再加上,避免重复提交

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

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

  1.         $utf8_xmlcontent ="\xEF\xBB\xBF".utf8_encode($xmlcontent);        //UTF-8文件头
  2.         if($fp = @fopen($sitemapfile, 'w')) {
  3.                 fwrite($fp, $utf8_xmlcontent);
  4.                 flock($fp, 2);
  5.                 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格式):

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

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

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

代码放在附件里了,仅供参考,请根据需要修改。
卖一个金币不过分吧…不想出钱的可以去我的论坛下载
http://www.keakon.cn/bbs/viewthread.php?tid=81

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Unicorns 发表于 2008-10-15 16:32:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

张富贵 发表于 2008-11-12 16:03:50 | 显示全部楼层
坚决的支持,问一下,没做静态化也可以做sitemap吗?
回复

使用道具 举报

hitest 发表于 2008-11-18 00:43:01 | 显示全部楼层
做个记号
回复

使用道具 举报

襄樊音乐论坛 发表于 2008-11-18 11:40:01 | 显示全部楼层
看的头大了
回复

使用道具 举报

foqong 发表于 2008-11-27 22:33:29 | 显示全部楼层
收藏了 慢慢研究!
回复

使用道具 举报

aloe521 发表于 2008-11-27 23:55:25 | 显示全部楼层
不错  手改的
回复

使用道具 举报

dickmoon 发表于 2008-12-8 23:37:57 | 显示全部楼层
留个脚印 慢慢研究!
看来做站不懂点代码,真不行啊。。。菜鸟学习中
回复

使用道具 举报

yehen233 发表于 2009-1-6 03:29:24 | 显示全部楼层
MARK~~~~~~~~~`
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-6-2 20:36 , Processed in 0.113348 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表