如何使用 Jekyll site.pages 生成 sitemap.xml

How to use Jekyll site.pages to generate sitemap.xml

我正在尝试使用 site.pages 在 Jekyll(GitHub 页)中自动生成 sitemap.xml,这是我得到的 sitemap.xml 代码:

---
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for page in site.pages %}
    <url>
        <loc>https://example.com{{ page.url | remove: 'index.html' }}</loc>
    </url>
    {% endfor %}
</urlset>

它的输出类似于:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/samplepage.html</loc>
    <!--<loc>https://example.com/samplepage</loc>-->
  </url>
</urlset>

我的目标是生成一个 sitemap.xml 而不是注释行中尾随的 .html。我试过 gsub(我假设 Jekyll 采用 Ruby 语法:Replace words in string - ruby)但它似乎没有改变任何东西或完全删除 page.url。

如果有人可以,我将不胜感激

  1. 修改 Jekyll 语法,使其生成 URLs 而没有尾随的 .html.
  2. 解释 | remove: 'index.html' 的语法(从生成的 sitemap.xml 中删除 URL https://example.com/index.html)。

我对 Jekyll 非常陌生,如果这个问题看起来微不足道,我深表歉意。

Jekyll 使用 Liquid process templates. The pipe syntax is a Liquid filter:

Filters are simple methods. The first parameter is always the output of the left side of the filter. The return value of the filter will be the new left value when the next filter is run. When there are no more filters, the template will receive the resulting string.

removestandard Liquid filters 之一,所以 Jekyll 文档没有列出它。


如果您的根文件夹中有此文件,页面 URL 很简单:

samplepage.html    # https://example.com/samplepage.html

相反,如果您有:

samplepage/
    index.html     # https://example.com/samplepage/index.html
                   # https://example.com/samplepage/

页面 URL 最终成为文件夹名称,如果您使用第二个 link.

,服务器将自动提供里面的 index.html 文件

site.pages会给你第一个link。由于您有一个从路径中删除 index.html 的过滤器,因此您最终会得到 extension-free URLs.

Jekyll 文件夹中的任何文件都使用他的扩展名生成,除非您使用 permalink

如果您像这样创建 sitemap.xml 文件:

---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for page in site.pages %}
    <url>
        <loc>https://example.com{{ page.url | remove: 'index.html' }}</loc>
    </url>
    {% endfor %}
</urlset>

它将生成为 sitemap.xml

您也可以使用 jekyll-sitemap,github 页支持。