让Movable Type生成Sitemap

上一篇文章里说,我目前的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标签不符合标准。比照我过去用工具自动生成的结果改进后通过了检查。这里的代码也已经更改了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据