Courses represent a significant investment for students. They're committing time, money, and energy to learning from you. Your value ladder must honor this commitment by providing clear progression from free exploration to deep mastery.

Course creators often make the mistake of offering only one program. This forces potential students into an all-or-nothing decision. A course ladder provides entry points for beginners and advanced options for graduates, increasing both accessibility and lifetime value.

Mini-Course Core Course Flagship Mastermind

The Course Ladder Structure

A complete course ladder might include:

  • Free mini-course: 5-day email course or short video series
  • Low-ticket workshop: Focused, 60-90 minute training
  • Core course: Comprehensive self-study program
  • Cohort course: Group learning with live elements
  • Mastermind: High-touch ongoing community

Not every creator needs all levels. Choose the rungs that serve your audience and fit your capacity. The key is providing progression for students at different stages.

Rung Price Range
Free mini-course $0
Workshop $27-97

The Free Mini-Course as Lead Magnet

A free mini-course is one of the most effective lead magnets for course creators. Delivered over 5-7 days via email, it provides genuine transformation while demonstrating your teaching style. Students experience your approach before committing to paid programs.

Design your mini-course to deliver a quick win. What's the smallest transformation you can provide in a week? A content creator might offer "5 Days to Better Headlines." A fitness coach might offer "5 Days to Better Mornings." The win creates momentum and trust.

The Workshop: First Paid Step

A focused workshop provides deeper transformation in 60-90 minutes. Price it accessibly to reduce friction for first-time buyers. Deliver clear value that leaves participants wanting more. The workshop serves as both product and promotion for your core course.

Live workshops build connection and allow Q&A. Recorded workshops can sell on autopilot. Consider both formats to serve different preferences. Promote the workshop to mini-course graduates who are ready to go deeper.

The Core Course: Your Flagship

Your core course is your main offer. It delivers complete transformation through comprehensive curriculum. Structure it for self-study with video lessons, worksheets, and resources. Price it based on the value of the transformation it provides.

Core courses can be evergreen (always available) or open on a schedule. Evergreen courses generate passive income but require strong student motivation. Scheduled courses create community and accountability but require more active management.

Core Course Elements:
- Video lessons (10-20 modules)
- Worksheets/workbooks
- Resource library
- Community access
- Lifetime updates
  

Cohort Programs: Live Learning

Cohort-based courses add live elements to self-study. Weekly calls, group accountability, and fixed start dates create structure that many students need. The cohort format commands higher prices and produces stronger results.

Run cohorts 2-4 times per year. Each cohort becomes an event you can promote and fill. Students bond with each other, increasing retention and referrals. Cohort graduates become candidates for your highest offers.

The Mastermind: Peak of the Ladder

At the top, offer a mastermind for your most committed students. This might include ongoing coaching, peer accountability, and advanced content. The mastermind provides maximum support for maximum transformation.

Masterminds work well as ongoing memberships with monthly calls and community. Students stay for years, building deep relationships and achieving sustained results. This rung provides recurring revenue and deep fulfillment.

Moving Students Up the Ladder

Each course should naturally lead to the next. Within your mini-course, mention the workshop. Within the workshop, mention the core course. Within the core course, mention the mastermind. Make progression feel like the obvious next step for those ready.

But never pressure. Some students will only ever take your mini-course, and that's fine. Others will climb every rung. Serve each where they are, and they'll climb when they're ready.

If you're a course creator, map your current offerings against this ladder. Where are the gaps? What could you add to serve students at different levels? Start with one new rung and build from there.

How to Create Related Posts in Jekyll on GitHub Pages

Why Related Posts Matter

Related posts are crucial for content discovery, engagement, and SEO. They encourage visitors to explore more articles, reduce bounce rate, and improve internal link structure. But Jekyll on GitHub Pages doesn't support plugins like jekyll-related-posts, so we must rely on smart Liquid logic instead.

Basic Strategy: Tag or Category Matching

The most straightforward method is matching tags or categories. Here's how to build that manually using Liquid, fully compatible with GitHub Pages.

1. Ensure Posts Have Tags and Categories


---
title: "How to Improve Blog SEO"
tags: [seo, blogging, optimization]
categories: [guides]
---

Jekyll automatically makes these available as arrays: page.tags and page.categories.

2. Add Related Posts Section

Inside your post layout (e.g., _layouts/post.html), add this code where you want the related posts to appear:

{% raw %}

Related Posts

    {% assign related = site.posts | where_exp: "post", "post.url != page.url" %} {% assign related_by_tag = "" | split: "" %} {% for post in related %} {% assign common_tags = post.tags | intersection: page.tags %} {% if common_tags.size > 0 %} {% assign related_by_tag = related_by_tag | push: post %} {% endif %} {% endfor %} {% assign limited_related = related_by_tag | slice: 0, 5 %} {% for rel in limited_related %}
  • {{ rel.title }}
  • {% endfor %}
{% endraw %}

This script:

  • Excludes the current post.
  • Finds other posts sharing one or more tags.
  • Limits the list to 5 items.

Improving Relevance with Tag + Category

To make it more refined, include both tag and category matches:

{% raw %}
{% assign related_by_topic = "" | split: "" %}
{% for post in site.posts %}
  {% if post.url != page.url %}
    {% assign common_tags = post.tags | intersection: page.tags %}
    {% assign common_cats = post.categories | intersection: page.categories %}
    {% if common_tags.size > 0 or common_cats.size > 0 %}
      {% assign related_by_topic = related_by_topic | push: post %}
    {% endif %}
  {% endif %}
{% endfor %}
{% assign limited = related_by_topic | slice: 0, 5 %}

{% endraw %}

Alternative Method: Precomputed Related Posts with YAML

If you want more control (e.g., manually curating related posts), define them in front matter:


---
title: "Top Tools for Blogging"
related:
  - /how-to-start-a-blog/
  - /best-seo-plugins/
---

Then in your layout:

{% raw %}
{% if page.related %}
  

Related Posts

    {% for rel in page.related %} {% assign related_post = site.posts | where: "url", rel | first %} {% if related_post %}
  • {{ related_post.title }}
  • {% endif %} {% endfor %}
{% endif %} {% endraw %}

This gives you full editorial control over the related content.

Bonus: Display Related Posts by Title Similarity (Manual Fallback)

Another creative trick is to use string comparison. While Liquid doesn’t support fuzzy matching, you can do partial matches:

{% raw %}
{% assign keyword = page.title | split: " " | first %}
{% assign matches = "" | split: "" %}
{% for post in site.posts %}
  {% if post.url != page.url and post.title contains keyword %}
    {% assign matches = matches | push: post %}
  {% endif %}
{% endfor %}

{% endraw %}

This works if you follow consistent naming conventions (e.g., all “SEO for…” posts).

Designing the Related Post List

To make the section attractive, add excerpt and thumbnail support (if available):

{% raw %}

{% endraw %}

Limitations and Performance

  • This method works best with < 500 posts due to Liquid performance limits.
  • No fuzzy match unless you precompute related posts offline.
  • Only supports simple logic (tags, categories, URL, title contains).

If you're dealing with a large blog or want smarter similarity scoring, consider generating a related.json file during build time using an external script (Node.js or Python), then reading it with JavaScript on the frontend.

Conclusion

Building a related posts system in Jekyll without plugins is entirely possible with Liquid. Whether you go with auto-matching by tag or curated lists in front matter, the benefit to user engagement and SEO is significant. Choose a method that fits your scale and editorial control needs, and make sure it integrates visually into your post layout.

In the next tutorial, we’ll explore building a related posts API using prebuilt JSON + JavaScript for smarter suggestions with real-time filtering!