Multi-Author Support with Author Profiles
Why Add Multi-Author Support
If you run a collaborative blog or want to showcase different personas on your site, adding multi-author support is essential. Mediumish comes with a single author structure by default, but it can be extended with minimal setup to display detailed author profiles and filter posts by writer, using built-in Jekyll features only.
Core Requirements
- Each post should be assigned to an author via front matter
- Author data should be managed in a centralized file
- Each author should have a profile page listing their posts
Step 1: Define Author Metadata in a Data File
Create a new file called _data/authors.yml and list all your contributors with their unique keys:
jdoe:
name: "Jane Doe"
bio: "Tech writer & frontend developer"
avatar: "/assets/images/jane.jpg"
twitter: "janedoe"
website: "https://janedoe.dev"
bsmith:
name: "Ben Smith"
bio: "Backend engineer who writes about performance"
avatar: "/assets/images/ben.jpg"
twitter: "bensmith"
website: "https://bensmith.codes"
This structure allows clean separation between post content and author info, keeping things DRY and consistent.
Step 2: Assign an Author Key in Each Post
Update each post’s front matter to include the author key that matches the entry in your data file:
---
layout: post
title: "Jekyll on GitHub Pages: SEO Blueprint"
author: jdoe
categories: [jekyll,seo]
featured: true
---
Use short and consistent author IDs (like usernames or initials).
Step 3: Display Author Info Below Each Post
Edit the post layout (usually _layouts/post.html) and add this snippet at the bottom to show author bio and links:
{% raw %}
{% assign author = site.data.authors[page.author] %}
<div class="author-box">
<img src="{{ author.avatar }}" alt="{{ author.name }}" class="author-avatar">
<div class="author-info">
<h3>{{ author.name }}</h3>
<p>{{ author.bio }}</p>
<p>
<a href="{{ author.website }}">Website</a> |
<a href="https://twitter.com/{{ author.twitter }}">Twitter</a>
</p>
</div>
</div>
{% endraw %}
You can style it using CSS like this:
.author-box {
display: flex;
margin-top: 2em;
padding: 1em;
background: #f0f0f0;
border-radius: 8px;
}
.author-avatar {
width: 64px;
height: 64px;
border-radius: 50%;
margin-right: 1em;
}
.author-info h3 {
margin: 0 0 0.3em;
font-size: 1.2em;
}
Step 4: Create Author Archive Pages
To allow readers to view all posts by an author, we’ll generate author pages dynamically using a Jekyll collection or a custom layout. One common approach is to use individual markdown files per author under a directory like authors/:
// authors/jdoe.md
---
layout: author
title: "Posts by Jane Doe"
author_id: jdoe
permalink: /author/jdoe/
---
The author_id field will be used to filter posts and fetch the correct profile data.
Step 5: Build the Author Layout
Create a new layout file at _layouts/author.html with the following logic:
{% raw %}
{% assign author = site.data.authors[page.author_id] %}
<section class="author-profile">
<img src="{{ author.avatar }}" alt="{{ author.name }}" class="author-avatar-large">
<h2>{{ author.name }}</h2>
<p>{{ author.bio }}</p>
<p><a href="{{ author.website }}">Visit website</a></p>
</section>
<section class="author-posts">
<h3>Posts by {{ author.name }}</h3>
<ul>
{% for post in site.posts %}
{% if post.author == page.author_id %}
<li><a href="{{ post.url | relative_url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</section>
{% endraw %}
Optional: Add Navigation to Author Pages
To help users discover authors, add a dedicated author index page:
// authors/index.md
---
layout: page
title: "Meet Our Authors"
permalink: /authors/
---
{% raw %}
<ul class="author-list">
{% for id in site.data.authors %}
{% assign author = site.data.authors[id[0]] %}
<li>
<a href="/author/{{ id[0] }}/">
<img src="{{ author.avatar }}" alt="{{ author.name }}">
{{ author.name }}
</a>
</li>
{% endfor %}
</ul>
{% endraw %}
Real-World Use Case
A community blog migrated to this approach after outgrowing a single-author layout. With 5 active contributors, the team used:
_data/authors.ymlfor consistency- Author archive pages to enable filtering
- Homepage widget showing top contributors (based on post count)
After rollout, they saw a 20% improvement in session depth and a noticeable increase in contributor visibility — which encouraged more content submission.
Benefits of This Setup
- Scalable: Easy to add new authors
- Customizable: Each author can have full profile and links
- Works on GitHub Pages: No plugins, pure Jekyll
Conclusion
With just a few lines of Liquid and a clean YAML file, you can transform a single-author Jekyll blog into a collaborative publishing platform. Author pages improve credibility, navigation, and contributor recognition — all while keeping your site fully static and deployable on GitHub Pages without plugins.
In the next article, we’ll cover how to **add multilingual support to Mediumish** using Jekyll data files and Liquid conditionals — without relying on JavaScript or third-party services.