2012-11-24 14 views
12

Ho appena spostato tutto il mio blog da WordPress a Jekyll. Ci sono ancora alcuni pezzi che devono essere riparati qua e là, ma al momento sto affrontando questo problema. Non riesco a generare sitemap in Jekyll. Ho visto che ci sono un paio di plugin che possono fare il lavoro per me.Genera sitemap in Jekyll senza plugin

Informazioni sul sito:

  • sito ospitato tramite le pagine Github
  • Tutto il sito handcoded - non si utilizza JB o Octopress

Sarebbe bello se potessi ottenere alcune indicazioni verso come fare il richiesto

Nota: questa domanda non è la stessa dei suoi predecessori. Non sto cercando le opzioni che usano _site.

risposta

10

È possibile creare un nuovo file nella root del sito denominato "sitemap.xml" e all'interno di tale pagina utilizzare tag liquidi per scorrere tutte le pagine e i post che estraggono i dati necessari. Sembra che farebbe il lavoro abbastanza facilmente, assumendo che tu voglia solo generare una pagina che elenchi tutte le pagine del sito in un formato xml conforme allo standard appropriato.

+1

Puoi farlo con i post, sì, ma non con le pagine. Se disponi di alcune pagine statiche, ad es. una pagina "Informazioni su di me", non farà parte dell'array site.posts. Pertanto, la mappa del sito sarà incompleta con questo appproach. – Polygnome

+3

Polygnome: non è corretto. C'è un: accessor delle pagine che ti consente di accedere a tutte le pagine (non ai post) tramite '{% per pagina in site.pages%}'. La fonte pertinente è qui: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb – heliotrope

+0

Interessante. Non è menzionato in https://github.com/mojombo/jekyll/wiki/Template-Data. Forse lo aggiungerai lì? – Polygnome

2

Non è possibile generare automaticamente una sitemap completa in jekyll senza utilizzare plug-in.

Quello che si potrebbe fare è creare il proprio script ruby ​​(o altro) che genera una sitemap come dati JSON e quindi inserirla nel file config.yml. Da lì è possibile accedere a quei dati da jekyll e visualizzarli.

Ma non esiste un modo integrato per farlo solo con jekyll.

10

Come spiegato da John Day in this article, è possibile creare un file sitemap.xml nella root del sito con questo contenuto:

--- 
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> 

In _config.yml, definire una variabile denominata production_url con URL di base completo del sito (ad esempio http://example.com) .

Se si desidera escludere qualsiasi collegamento dalla sitemap, includere sitemap_exclude: y nella parte anteriore della pagina o post.

Per un esempio più avanzato, fare riferimento a questo articolo: Building a Better Sitemap.xml with Jekyll.

2

Mi sono imbattuto in questo perché il mio sito è ospitato su github-pages. Sembra che le pagine di Github ora lo supportino.

solo dovuto aggiungere al _config.yml:

gems: 
    - jekyll-sitemap 

(Facoltativamente, è possibile aggiungere al vostro Gemfile, ma la mia era già incluso tramite dipendenza)

(fatto divertente: Jekyll-redirect-da è supportato anche da pagine github)

+2

Nel caso in cui qualcun altro si imbatta in questo, assicurati di non avere alcuna scheda prima di digitare '- jekyll-sitemap', Jekyll non costruirà in questo modo. L'ho aggiunto al mio Gemfile in precedenza ma non il mio _config.yml e non ha generato una sitemap. – matrixanomaly

+0

Inoltre, non mi ero reso conto che avevo bisogno di rigenerare completamente il sito per ottenere sitemap.xml da mostrare nella cartella _site. – evan