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

时间:2015-08-02 17:02:57

标签: jekyll github-pages

我尝试使用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>

我的目标是生成一个没有跟踪.html的sitemap.xml,如注释行所示。我已经尝试gsub(我假设Jekyll使用Ruby语法:Replace words in string - ruby)但似乎要么没有改变任何内容,要么完全删除page.url。

如果有人能

,我会很感激
  1. 修改Jekyll语法,以便生成不带尾随.html的网址。
  2. 解释| remove: 'index.html'的语法(从生成的https://example.com/index.html中删除网址sitemap.xml)。
  3. 我对Jekyll非常不熟悉,如果这个问题看似微不足道,那么道歉。

2 个答案:

答案 0 :(得分:2)

Jekyll使用Liquid来process templates。管道语法是Liquid filter

  

过滤器是简单的方法。第一个参数始终是过滤器左侧的输出。运行下一个过滤器时,过滤器的返回值将是新的左值。当没有更多过滤器时,模板将收到结果字符串。

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最终是文件夹名称,如果您使用第二个链接,服务器将自动提供内部的index.html文件。

site.pages将为您提供第一个链接。如果您有一个从路径中删除index.html的过滤器,则最终会得到extension-free URLs

答案 1 :(得分:1)

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

您也可以使用github页面支持的jekyll-sitemap