一步一步学做Discuz!6.1的sitemap
2008 10 15 03:37 PM 3866次查看
第一步:
先来了解sitemap的语法吧,《根据 Sitemap 协议手动创建 Sitemap》这篇文章有介绍:
也就是构造一个这样的XML就行了,注意文件编码为UTF-8。
- 创建一个文本文件并将其带 .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。
第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 标记:有关详情,请参阅 Sitemap 协议。
- <sitemapindex>- 文件头尾的父标记。
- <sitemap> - 文件中列出的每个 Sitemap 的父标记(<sitemapindex> 的子标记)
- <loc> - Sitemap 的位置(<sitemap> 的子标记)
- <lastmod> - 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的时间也不清楚,但愿不是手动提交=。=
嘛,明天再看看记录就知道了。
最后是代码,仅供参考,请根据需要修改。
向下滚动可载入更多评论,或者点这里禁止自动加载。