Jekyll: Ähnliche Artikel anzeigen (ohne Plugin)

Um die Verweildauer von Besuchern eures Blogs zu erhöhen, könnt ihr zu einem Artikel eine Auflistung ähnlicher bzw. themenverwandter Artikel (Related Posts) anzeigen. Auch ältere Artikel, die sonst vielleicht in der Versenkung verschwinden, können so bei entsprechender Themenrelevanz beworben werden.

Wie ihr für euren Jekyll-Blog mit wenigen Zeilen Code zu einem Artikel andere themenrelevante Artikel basierend auf den vergebenen Schlagwörtern (Tags) ermittelt sowie anzeigt, erfahrt ihr in diesem Beitrag.

Verwendete Software für diesen Beitrag
  • Jekyll v4.0.0

Beispiel

Die folgende Abbildung zeigt, wie ich hier in meinem Blog unter einem Beitrag bis zu 5 themenverwandte Beiträge aufliste:

Beispiel: Ähnliche Artikel in Jekyll anzeigen

Code zum Ermitteln der ähnlichen Artikel

Im Verzeichnis _includes erstellt ihr eine Datei namens related-post-list.html mit dem folgendem Inhalt:

{% assign countRelatedPosts = 0 %}
{% assign maxRelatedPosts = 5 %}
{% assign relatedPostLinks = '' %}
{% assign relatedPostIds = [] %}

{% for postTag in page.tags %}
    {% if countRelatedPosts >= maxRelatedPosts %}
        {% break %}
    {% endif %}

    {% for relatedPost in site.tags[postTag] %}
        {% if relatedPostIds contains relatedPost.id %}
            {% continue %}
        {% endif %}

        {% if relatedPost.url != page.url %}
            {% capture link %}
                <li>
                    <a href="{{ relatedPost.url | absolute_url }}"
                       title="Beitrag: {{ relatedPost.title }}">
                        {{ relatedPost.title }}
                    </a>
                </li>
            {% endcapture link %}

            {% assign relatedPostLinks = relatedPostLinks | append: link %}
            {% assign countRelatedPosts = countRelatedPosts | plus: 1 %}
            {% assign postIdArray = relatedPost.id | split: ',' %}
            {% assign relatedPostIds = relatedPostIds | concat: postIdArray %}

            {% if countRelatedPosts >= maxRelatedPosts %}
                {% break %}
            {% endif %}
        {% endif %}
    {% endfor %}
{% endfor %}

{% if relatedPostLinks != '' %}
    <div>
        <span>
            Hat dir der Beitrag gefallen? Dann interessiert dich vielleicht auch:
        </span>
        <ul>
            {{ relatedPostLinks }}
        </ul>
    </div>
{% endif %}
HTML & Liquid - Datei: _includes/related-post-list.html

Der Code wird im Kontext eines bestimmten Artikels aufgerufen. Basierend auf dessen Tags werden alle Artikel mit den gleichen Tags durchsucht. Sobald 5 (anpassbar via maxRelatedPosts themenverwandte Artikel gefunden werden, bricht die Schleife ab und es werden die generierten Links (relatedPostLinks) ausgegeben.

Code zum Anzeigen der ähnlichen Artikel

In eurer Layout-Datei zur Anzeige eines Artikels (bei mir _layouts/post.html - siehe auch Jekyll: Layouts) könnt ihr nun die soeben erstellte Datei an beliebiger Stelle einbinden:

<article>
    [...]
    <footer id="articleFooter">
        {% include related-post-list.html %}
    </footer>
</article>
HTML & Liquid

Fazit

Den vorgestellten Code könnt ihr individuell anpassen. Ich habe ihn bei z.B. so erweitert, dass ich bei Bedarf im Front Matter eines Beitrags ähnliche Beiträge fest hinterlegen kann. Sollte die Anzahl der fest hinterlegten Beiträge nicht maxRelatedPosts entsprechen, so werden weitere zufällige themenverwandte Beiträge, wie in diesem Beitrag erläutert, ermittelt und angezeigt.

Alternativ besteht natürlich auch die Möglichkeit, die ähnlichen Artikel anhand der verwendeten Kategorien und nicht anhand der Tags zu ermitteln.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).