2012-11-24 77 views
12

我只是將我的整個博客從WordPress轉移到Jekyll。還有一些需要修復的部分,但我現在正面臨這個問題。我無法在Jekyll中生成站點地圖。我看到有幾個插件可以爲我做這項工作。在沒有插件的Jekyll中生成站點地圖

網站上的信息:

  • 網站通過Github的頁面
  • 整個網站硬編碼的託管 - 不使用JB或Octopress

這將是巨大的,如果你我能得到對一些指針如何做到這一點。

注意:這個問題是不一樣的,因爲它的前輩。我不在尋找使用_site的選項。

回答

10

您可以在站點根目錄下創建一個名爲'sitemap.xml'的新文件,並在該頁面內使用液體標籤遍歷所有頁面並提取所需數據。看起來像這樣會很容易地完成這項工作,假設您只是想生成一個頁面,該頁面以符合相應標準的xml格式列出網站上的每個頁面。

+1

你可以使用帖子來做到這一點,是的,但沒有頁面。如果您有其他靜態頁面,例如一個'關於我'頁面,它不會是site.posts數組的一部分。因此,該appproach網站地圖將不完整。 – Polygnome

+3

Polygnome - 這是不正確的。有一個:頁面訪問器,它允許你通過「{%for page in site.pages%}」訪問所有頁面(不是帖子)。相關來源在這裏:https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb – heliotrope

+0

有趣。它在https://github.com/mojombo/jekyll/wiki/Template-Data中沒有提及。也許你會在那裏添加它? – Polygnome

2

您不能在不使用插件的情況下在jekyll中自動生成完整的站點地圖。

你可以做的是製作自己的ruby(或其他)腳本,生成一個網站地圖作爲JSON數據,然後將其插入到你的config.yml中。從那裏你可以訪問來自jekyll的數據並顯示它。

但是沒有內建的方法可以用jekyll來做到這一點。

10

正如this article解釋由John Day,您可以創建一個sitemap.xml文件在該網站的根與此內容:

--- 
layout: nil 
title : "Sitemap" 
sitemap_exclude: y 
--- 
<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    {% for post in site.posts %} 
    <url> 
     <loc>{{site.production_url}}{{ post.url | remove: 'index.html' }}</loc> 
    </url> 
    {% endfor %} 

    {% for page in site.pages %} 
    {% if page.sitemap_exclude != 'y' %} 
    <url> 
     <loc>{{site.production_url}}{{ page.url | remove: 'index.html' }}</loc> 
    </url> 
    {% endif %} 
    {% endfor %} 
</urlset> 

_config.yml,定義了一個與該網站的全部基本URL命名production_url變量(例如http://example.com) 。

如果您想從網站地圖中排除任何鏈接,請在頁面或帖子的前端添加sitemap_exclude: y

有關更高級的示例,請參閱此文章:​​。

2

剛剛遇到此問題,因爲我的網站託管在github頁面上。 看來github頁面現在支持這個。

剛把添加到_config.yml:

gems: 
    - jekyll-sitemap 

(您也可以選擇添加到您的Gemfile,但我是通過依賴已經包括在內)

(有趣的事實:哲基爾重定向消息從也可以通過github頁面支持)

+2

如果其他人絆倒了這一點,請確保在輸入' - jekyll-sitemap'之前沒有任何標籤,Jekyll不會以這種方式構建。我以前將它添加到我的Gemfile中,但不是我的_config.yml,它不生成站點地圖。 – matrixanomaly

+0

另外,我沒有意識到我需要完全重新生成站點才能讓sitemap.xml顯示在_site文件夾中。 – evan