how to organize your jekyll content after leaving wordpress
Why content organization matters after migrating from WordPress to Jekyll
WordPress takes care of a lot behind the scenes: category archives, tag pages, author filters, even custom post types. When moving to Jekyll, you’re responsible for rebuilding this structure manually—but that’s also an opportunity. With Jekyll, you gain complete control over your content hierarchy, URLs, and presentation.
This article walks you through the key decisions and best practices for organizing your blog or site content in Jekyll post-migration, ensuring both user experience and SEO don’t suffer.
Step 1: Audit your WordPress content structure
Before restructuring in Jekyll, take inventory of how your WordPress content is organized:
- How many categories do you use? Are they broad (e.g. "Marketing") or niche (e.g. "Email Campaign Tips")?
- Do you use tags consistently? Or are they redundant with categories?
- Did you use custom post types? Like "Books", "Events", or "Products"?
- Any URL structures or taxonomies worth preserving?
Export your posts and metadata using Tools → Export in WordPress, or use WP CLI to generate CSV/XML data for deeper inspection.
Step 2: Use categories and tags in Jekyll front matter
Jekyll supports categories and tags natively through YAML front matter. For example:
---
title: "Email Marketing for Freelancers"
categories: [marketing,email]
tags: [freelancing,tools,automation]
---
Then in your layouts or archive pages, you can loop through posts by category or tag:
{% for post in site.categories.marketing %}
<a href="{{ post.url }}">{{ post.title }}</a>
{% endfor %}
Be consistent in tag naming. Don’t mix "freelancing" and "freelance". Decide on singular/plural usage and stick to it.
Building tag and category archive pages
Use a template like tag.html or category.html in your root or _layouts folder, and pass the tag/category via URL.
---
layout: default
title: Posts tagged with {{ page.tag }}
---
<h2>Tag: {{ page.tag }}</h2>
{% assign posts = site.tags[page.tag] %}
{% for post in posts %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
Use a generator plugin like jekyll-tagging or jekyll-archives to automate archive creation if you're deploying with GitHub Pages via Actions.
Step 3: Organize with Jekyll collections
WordPress uses custom post types to separate things like "Books" or "Courses" from regular posts. Jekyll offers collections for the same purpose.
Define collections in _config.yml:
collections:
books:
output: true
permalink: /books/:title/
Then place content in a folder like _books/. Each item is a markdown file with front matter:
---
title: "The Indie SEO Manual"
author: "Jane Doe"
description: "A practical guide to building organic traffic"
---
You can loop over these in templates:
{% for book in site.books %}
<h3>{{ book.title }}</h3>
<p>{{ book.description }}</p>
{% endfor %}
Use collections for anything not strictly a blog post: case studies, documentation, team members, podcast episodes, etc.
Step 4: Define clean permalinks for SEO and readability
Unlike WordPress which builds URLs automatically, Jekyll uses the permalink field in each post or collection item’s front matter.
Best practice permalink formats
/blog/post-title/— for regular posts/category-name/post-title/— for grouped content/books/my-book-title/— for collections
Example:
permalink: /marketing/email-strategy-2025/
Make sure your permalinks are consistent with any previously indexed WordPress URLs to retain SEO value. Use 301 redirects if you change structure.
Step 5: Create navigation from your structure
In WordPress, menus are built from the dashboard. In Jekyll, you can define menus manually or dynamically.
Manual navigation example:
# _data/navigation.yml
- title: Blog
url: /blog/
- title: Books
url: /books/
- title: About
url: /about/
Then in a layout or include:
{% for item in site.data.navigation %}
<a href="{{ item.url }}">{{ item.title }}</a>
{% endfor %}
Category-based nav (dynamic):
{% assign cats = site.categories | sort %}
{% for cat in cats %}
<a href="/categories/{{ cat[0] | slugify }}/">{{ cat[0] }}</a>
{% endfor %}
Step 6: Enable filtering and search by tag or category
To enhance usability, consider adding filtering by category/tag on your blog index. Since Jekyll is static, this is done client-side with JavaScript or through URL-based filters.
Libraries like List.js or Lunr.js can help you build interactive filtering/search UIs.
Step 7: Keep your structure version-controlled and scalable
One of Jekyll's biggest advantages is that content structure lives in code. You can manage categories and collections like software:
- Store content in folders by type
- Use
_data/to drive structure: menus, authors, filters - Maintain consistent naming and URL slugs
This is especially powerful when managing multilingual content or content pipelines—topics covered in our upcoming articles.
Conclusion
Reorganizing your content after migrating from WordPress to Jekyll isn't just a necessity—it's an opportunity. You get to rethink your categories, tag hierarchy, URL structures, and even your menus, all with total control. By using Jekyll’s categories, tags, collections, and permalink features thoughtfully, you can create a content model that is lean, SEO-friendly, and far easier to maintain over time.
In the next article, we’ll cover how to deploy your Jekyll site to GitHub Pages or a custom host, and keep everything updated automatically.