本帖最后由 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 绿色免安装修改呜啦版》,并修改使其符合规范):
写文件头:-
- 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";
- //也可写成http://www.sitemaps.org/schemas/sitemap/0.9
复制代码 生成更新内容:
- $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的时间也不清楚,但愿不是手动提交=。=
嘛,明天再看看记录就知道了。
代码放在附件里了,仅供参考,请根据需要修改。
卖一个金币不过分吧…不想出钱的可以去我的论坛下载
http://www.keakon.cn/bbs/viewthread.php?tid=81 |