2012-11-24 5 views
12

Ich habe gerade meinen gesamten Blog von WordPress zu Jekyll verschoben. Es gibt immer noch einige Teile, die hier und da repariert werden müssen, aber ich stehe momentan vor diesem Problem. Ich kann keine Sitemaps in Jekyll generieren. Ich habe gesehen, dass es ein paar Plugins gibt, die die Arbeit für mich erledigen können.Generieren Sie Sitemap in Jekyll ohne Plugin

Informationen auf der Website:

  • Website gehostet über Github Seiten
  • Entire site handcoded - nicht JB oder Octopress mit

Es wäre toll, wenn ich Ihnen einige Hinweise bekommen konnte in Richtung wie man das benötigt.

Hinweis: Diese Frage ist nicht die gleiche wie bei den Vorgängern. Ich suche keine Optionen, die _site verwenden.

Antwort

10

Sie könnten eine neue Datei in Ihrem Site-Root namens 'sitemap.xml' erstellen, und innerhalb dieser Seite verwenden Sie flüssige Tags, um über alle Seiten und Posts zu iterieren und die notwendigen Daten zu extrahieren. Scheint so, als würde das den Job ziemlich leicht machen, vorausgesetzt, dass Sie nur eine Seite erstellen möchten, die jede Seite der Site in einem XML-Format auflistet, das dem entsprechenden Standard entspricht.

+1

Das können Sie mit Posts tun, ja, aber nicht mit Seiten. Wenn Sie weitere statische Seiten haben, z.B. Eine 'Über mich'-Seite wird nicht Teil des site.posts-Arrays sein. Daher wird die Sitemap mit diesem App-Projekt unvollständig sein. – Polygnome

+3

Polygnome - das ist nicht korrekt. Es gibt einen: pages-Accessor, mit dem Sie über '{% for page in site.pages%}' auf alle Seiten (keine Posts) zugreifen können. Relevante Quelle ist hier: https://github.com/mojombo/jekyll/blob/master/lib/jekyll/site.rb – heliotrope

+0

Interessant. Es wird nicht in https://github.com/mojombo/jekyll/wiki/Template-Data erwähnt. Vielleicht fügst du es dort hinzu? – Polygnome

2

Sie können nicht automatisch eine vollständige Sitemap in Jekyll generieren, ohne Plugins zu verwenden.

Sie könnten ein eigenes Ruby-Skript erstellen, das eine Sitemap als JSON-Daten generiert und dann in Ihre Datei config.yml einfügt. Von dort können Sie auf diese Daten von jekyll zugreifen und sie anzeigen.

Aber es gibt keine eingebaute Möglichkeit, das nur mit Jekyll zu tun.

10

Wie John Day in this article erklärt, können Sie eine sitemap.xml-Datei in der mit diesem Inhalt root Website erstellen:

--- 
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 definieren eine Variable production_url mit der Website voll Basis-URL (zB http://example.com) benannt .

Wenn Sie Links von der Sitemap ausschließen möchten, fügen Sie sitemap_exclude: y in den Anfang der Seite oder Post ein.

Für ein fortgeschritteneres Beispiel finden Sie in diesem Artikel: Building a Better Sitemap.xml with Jekyll.

2

Ich bin gerade darauf gestoßen, weil meine Seite auf github-Seiten gehostet wird. Es scheint, github Seiten unterstützt dies jetzt.

musste einfach _config.yml hinzufügen:

gems: 
    - jekyll-sitemap 

(Sie können Ihre Gemfile optional hinzufügen, aber mir war schon über Abhängigkeit enthalten)

(Spaß Tatsache: Jekyll-Redirect-from wird auch von github-Seiten unterstützt)

+2

Falls jemand darüber stolpert, vergewissere dich, dass du keine Tabs hast, bevor du '-jekyll-sitemap' eingibst, Jekyll wird nicht so bauen. Ich habe es vorher zu meiner Gemfile hinzugefügt, aber nicht zu meiner _config.yml und es hat keine Sitemap erzeugt. – matrixanomaly

+0

Außerdem war mir nicht klar, dass ich die Seite vollständig neu generieren musste, um sitemap.xml im Ordner _site anzuzeigen. – evan