上一篇文章里说,我目前的blog在Google索引里总是旧的链接排在前面,而新的排在后面。新的链接和旧的相比几乎没有变化,两者间唯一的不同在于旧链接的结尾是/,而新链接是以.html结尾的。把/换成.html就可以访问到新的页面,否则就会得到404错误。我是没有问题,但不知情的人从Google里搜索到我的页面,获得404错误就不大方便了。
因此我在上一篇文章里写过,我在想法子让Google把顺序调整过来。我当时的主意是先在robots.txt里面加上“Disallow: /”这一句,粗暴的阻止任何搜索引擎索引我的全部页面。等Google搜索结果里面不含我的站点的任何结果后,再去掉robots.txt里面的那一句,让Google重新索引。相当粗暴的办法,我也不知道有没有效。但写文章的时候我自己提到了Sitemap,我才想起可能我的问题可以用sitemap来解决。
于是我就去我过去用来生成sitemap.xml的网站去生成最新的sitemap来研究。过去每次生成sitemap的时间都很长,基本上在5分钟左右。因此我就先去做别的时了。一会我回到那个页面看生成进度的时候,莫名奇妙的看到已经处理完了。纳闷间我看了一下生成的sitemap.xml文件的大小,才10多K,远远低于我平时的结果60多K。看了一下提示信息,说有什么错误,我也不明白那个错误是什么意思。而且这个网站生成的sitemap还有一个问题,就是它会生成一些类似“/mt-cp.cgi?__mode=view&blog_id=1&id=1”这样的链接,是我们不希望Google索引的。
然后我就开始找其它的生成工具,Fenng介绍过Google Sitemap Generator,我前几天也下载了。不过它的配置远没有我想象的那样简单,需要自己配置一个xml设定文件。没有很多中文帮助,我对着Google提供的帮助简单弄了一个,结果出错了。在我过去用的网站外,没有类似的那么方便的了。
WordPress里有个很好用的sitemap自动生成插件,我觉得Movable Type里应该也有一个才对,于是就去Movable Type的plugins支持页面里去搜索,居然没有。然后再搜它的Documentation页面和Wiki页面。结果在Wiki结果里一眼就看到了Canonical Google Sitemap template,进去看是一个sitemap模板。通过替换能为首页、分类、月份、星期、天、每篇单独的文章和页面档案分别生成链接。它的默认优先级设定比较符合我的需求,因此就试了一下。它的默认优先级如下:
首页=1.0
分类=0.8
月份=0.6
星期=0.4
天=0.2
单篇文章=1.0
页面=1.0
之前从来没有试过自己添加Movable Type模板,开始的时候有点摸不着头脑。然后尝试着在后台进入Design -> Templates页面,在里面的Index Templates部分下面点Create index template链接。在接下来的窗口里面把那篇文章里的东西复制进去(原文给的代码没有很好的缩进设定,我花时间调整了一下,代码放在本页最后),设定好标题,然后点下面的Template Options弹出模板选项,在Output File里填生成的sitemap文件名,我写的是sitemap.xml。其它的保持原样。然后点Save,系统会提示需要更新。点更新后大约20秒后sitemap就被生成了。我看了一下,和过去用网站在线生成的sitemap差不多。也没有生成乱七八糟的链接。
我刚刚把robots.txt里面Disallow那一句去掉了,Google目前还没有更新,因此我无法提交新的sitemap.xml测试。另外我不清楚这个通过模板生成的sitemap会不会在我每次发布新文章的时候自动更新。如果能自动更新的话就非常理想了。因此借由发布这篇文章来尝试一下。
模板代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Canonical sitemap.xml template v0.8
### START SETUP
Possible values for the frequency variables are:
always
hourly
daily
weekly
monthly
yearly
never
"always" should be used to describe documents that change each time they are accessed.
"never" should be used to describe archived URLs.
-->
<$MTSetVar name="home-frequency" value="daily"$>
<$MTSetVar name="category-frequency" value="weekly"$>
<$MTSetVar name="current-monthly-frequency" value="daily"$>
<$MTSetVar name="past-monthly-frequency" value="never"$>
<$MTSetVar name="current-weekly-frequency" value="daily"$>
<$MTSetVar name="past-weekly-frequency" value="never"$>
<$MTSetVar name="current-daily-frequency" value="hourly"$>
<$MTSetVar name="past-daily-frequency" value="never"$>
<$MTSetVar name="recent-entry-frequency" value="hourly"$>
<$MTSetVar name="past-entry-frequency" value="monthly"$>
<$MTSetVar name="page-frequency" value="weekly"$>
<!--
Values for priority range from 0.0 to 1.0 and reflect the relative importance of pages within your site.
Do not set these all to a high value, as that's no different from setting them all to 0.0.
This does not affect how your pages are compared to other sites'.
-->
<$MTSetVar name="home-priority" value="1.0"$>
<$MTSetVar name="category-priority" value="0.8"$>
<$MTSetVar name="monthly-priority" value="0.6"$>
<$MTSetVar name="weekly-priority" value="0.4"$>
<$MTSetVar name="daily-priority" value="0.2"$>
<$MTSetVar name="entry-priority" value="1.0"$>
<$MTSetVar name="page-priority" value="1.0"$>
<!-- ### END SETUP -->
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<!-- ### This is your blog's homepage -->
<loc><$MTBlogURL encode_xml="1"$></loc>
<changefreq><$MTGetVar name="home-frequency"$></changefreq>
<priority><$MTGetVar name="home-priority"$></priority>
</url>
<!-- ### START CATEGORY ARCHIVES -->
<mtifArchiveTypeEnabled archive_type="Category">
<mtcategories>
<url>
<loc><$MTCategoryArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="category-frequency"$></changefreq>
<priority><$MTGetVar name="category-priority"$></priority>
</url>
</mtcategories>
</mtifArchiveTypeEnabled>
<!-- ### END CATEGORY ARCHIVES -->
<!-- ### START MONTHLY ARCHIVES -->
<mtifArchiveTypeEnabled archive_type="Monthly">
<mtarchiveList archive_type="Monthly" lastn="1">
<url>
<!-- ### The current month is still being updated. -->
<loc><$MTArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="current-monthly-frequency"$></changefreq>
<priority><$MTGetVar name="monthly-priority"$></priority>
</url>
</mtarchiveList>
<mtarchiveList archive_type="Monthly" lastn="9999" offset="1">
<url>
<!-- ### Past months are just archived. -->
<loc><$MTArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="past-monthly-frequency"$></changefreq>
<priority><$MTGetVar name="monthly-priority"$></priority>
</url>
</mtarchiveList>
</mtifArchiveTypeEnabled>
<!-- ### END MONTHLY ARCHIVES -->
<!-- ### START WEEKLY ARCHIVES -->
<mtifArchiveTypeEnabled archive_type="Weekly">
<mtarchiveList archive_type="Weekly" lastn="1">
<url>
<!-- ### The current week is still being updated. -->
<loc><$MTArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="current-weekly-frequency"$></changefreq>
<priority><$MTGetVar name="weekly-priority"$></priority>
</url>
</mtarchiveList>
<mtarchiveList archive_type="Weekly" lastn="9999" offset="1">
<url>
<!-- ### Past weeks are just archived. -->
<loc><$MTArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="past-weekly-frequency"$></changefreq>
<priority><$MTGetVar name="weekly-priority"$></priority>
</url>
</mtarchiveList>
</mtifArchiveTypeEnabled>
<!-- ### END WEEKLY ARCHIVES -->
<!-- ### START DAILY ARCHIVES -->
<mtifArchiveTypeEnabled archive_type="Daily">
<mtarchiveList archive_type="Daily" lastn="1">
<url>
<!-- ### The current day is still being updated. -->
<loc><$MTArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="current-daily-frequency"$></changefreq>
<priority><$MTGetVar name="daily-priority"$></priority>
</url>
</mtarchiveList>
<mtarchiveList archive_type="Daily" lastn="9999" offset="1">
<url>
<!-- ### Past days are just archived. -->
<loc><$MTArchiveLink encode_xml="1"$></loc>
<lastmod><mtentries lastn="1"><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></mtentries></lastmod>
<changefreq><$MTGetVar name="past-daily-frequency"$></changefreq>
<priority><$MTGetVar name="daily-priority"$></priority>
</url>
</mtarchiveList>
</mtifArchiveTypeEnabled>
<!-- ### END DAILY ARCHIVES -->
<!-- ### START INDIVIDUAL ARCHIVES -->
<mtifArchiveTypeEnabled archive_type="Individual">
<mtentries lastn="10">
<url>
<!-- ### The recent items you post are more likely to be active(comments, etc) than older ones. -->
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
<changefreq><$MTGetVar name="recent-entry-frequency"$></changefreq>
<priority><$MTGetVar name="entry-priority"$></priority>
</url>
</mtentries>
<mtentries lastn="999999" offset="10">
<url>
<!-- ### And the rest of them. -->
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
<changefreq><$MTGetVar name="past-entry-frequency"$></changefreq>
<priority><$MTGetVar name="entry-priority"$></priority>
</url>
</mtentries>
</mtifArchiveTypeEnabled>
<!-- ### END INDIVIDUAL ARCHIVES -->
<!-- ### START PAGE ARCHIVES ### -->
<mtifArchiveTypeEnabled archive_type="Page">
<mtpages>
<url>
<loc><$MTPagePermalink encode_xml="1"$></loc>
<lastmod><$MTPageModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
<changefreq><$MTGetVar name="page-frequency"$></changefreq>
<priority><$MTGetVar name="page-priority"$></priority>
</url>
</mtpages>
</mtifArchiveTypeEnabled>
<!-- ### END PAGE ARCHIVES ### -->
</urlset>
另:刚才在找Fenng的介绍时又仔细看了一下他的文章,原来他过去用的就是模板生成的方法。不过他给的模板没有区分页面的优先级。
另另:刚才发布了这篇文章,发现后台的sitemap.xml果然同步更新了,非常不错。接下来就看Google的索引结果会不会跟着变动了。还有就是我本来担心这样一来发布文章的速度会变得很慢,结果我并没有觉察到不同。我不确定是不是因为我目前的文章少的缘故。不过就算文章多,也可以通过设定模板的参数,把更新方式改成如“手动更新”之类的就可以解决问题了。
另另另:刚才找到了一个检查sitemap是否符合标准的网站:http://www.validome.org/google/validate,检测了一下说urlset标签不符合标准。比照我过去用工具自动生成的结果改进后通过了检查。这里的代码也已经更改了。