0

我使用Skeleventy生成我的静态站点。

那里的 Njk 模板使用 collections.all 为所有可能的页面生成站点地图,就像这样

---
permalink: sitemap.xml
hidden: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{%- for page in collections.all %}
{%- if not page.data.hidden %}
    <url>
        <loc>{{ site.url }}{{ page.url | url }}</loc>
        <lastmod>{{ page.date | htmlDateDisplay }}</lastmod>
    </url>
{%- endif %}
{%- endfor %}

生成的站点地图中的输出之一是

https://skeleventy.netlify.app/category/all/

这是所有可能页面的集合 - 有点乱。

例如,谷歌索引每个类别而不是“全部类别”会更好

<url>
<loc>https://skeleventy.netlify.app/category/software/</loc>
<lastmod>2020-7-20</lastmod>
</url>
<url>
<loc>https://skeleventy.netlify.app/category/writing/</loc>
<lastmod>2020-7-20</lastmod>
</url>

但是我如何编辑该 njk 模板,以便它在站点地图中捕获和输出不同的类别?- 排除类别/全部 - 保留其他重要页面,如主页、每篇博客文章等。

4

1 回答 1

1

我想我有它的工作。我已经在我的机器上运行了这个,如果你想要一份副本,请联系。我通常不使用 Nunjucks,所以请原谅任何愚蠢的错误。我对 sitemap.njk 所做的第一个 mod 是隐藏 collections.all:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{%- for page in collections.all %}
{%- if not page.data.hidden %}
    {%- if page.url !== "/category/all/" %}
    <url>
        <loc>{{ site.url }}{{ page.url | url }}</loc>
        <lastmod>{{ page.date | htmlDateDisplay }}</lastmod>
    </url>
    {% endif %}
{%- endif %}
{%- endfor %}

有点hacky但有效。接下来,我需要一种方法来获取博客类别页面。我查看了tags.njk。根据我在那里看到的,我为 .eleventy.js 命名类别编写了一个过滤器。我不认为这是一个伟大的名字:

eleventyConfig.addFilter("categories", function(collections) {
      let categories = Object.keys(collections).filter(c => c !== 'all');
      return categories;
});

回到站点地图,然后我这样做了:

{%- set cats = collections | categories %}
{%- for cat in cats %}
    {% set newestDate = collections[cat] | getLatestDate %}
    <url>
        <loc>{{ site.url }}/category/{{ cat }}/</loc>
        <lastmod>{{ newestDate | htmlDateDisplay }}</lastmod>
    </url>
{%- endfor %}
</urlset>

注意getLatestDate过滤器,它是这样定义的:

eleventyConfig.addFilter("getLatestDate", function(collection) {
    console.log('running getLatestDate');
    return collection[0].date;
});

它似乎运作良好。这是我的输出:

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://skeleventy.netlify.app/blog/post-1/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/blog/post-2/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/blog/post-3/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/about/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/blog/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/contact/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    
    <url>
        <loc>https://skeleventy.netlify.app/category/blog/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/category/business/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/category/digital/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
    
    <url>
        <loc>https://skeleventy.netlify.app/category/health/</loc>
        <lastmod>2020-8-26</lastmod>
    </url>
</urlset>

如果您想要完整的副本,请与我联系。

于 2020-08-26T21:01:47.553 回答