Home Blog Jekyll SEO Guide: How to Rank Higher on Google
SEO

Jekyll SEO Guide: How to Rank Higher on Google

A practical SEO guide for Jekyll sites — from jekyll-seo-tag setup to structured data, sitemaps, canonical URLs, Core Web Vitals, and content strategy.

Jekyll SEO Guide: How to Rank Higher on Google

Jekyll gives you a significant SEO head start over WordPress — no bloated plugins, no slow database queries, and near-perfect Core Web Vitals out of the box. But there are still specific things you need to configure to rank well. This guide covers everything.


Why Jekyll Is Already Good for SEO

Before diving into configuration, it helps to understand what you already have:

  • Fast load times — Static HTML is served directly from a CDN with no server-side processing
  • Clean HTML — No WordPress bloat, no unnecessary <div> nesting
  • HTTPS by default — GitHub Pages, Netlify, and Cloudflare Pages all provide free SSL
  • Mobile-friendly — Most Jekyll themes are responsive out of the box

These factors directly influence Google’s Core Web Vitals scores, which became a ranking factor in 2021.


Step 1: Install jekyll-seo-tag

jekyll-seo-tag is the foundation of Jekyll SEO. It automatically generates:

  • <title> tags
  • Meta descriptions
  • Open Graph tags (for social sharing)
  • Twitter Card tags
  • JSON-LD structured data

Install:

# Gemfile
gem "jekyll-seo-tag"
# _config.yml
plugins:
  - jekyll-seo-tag

Add to your layout (before </head>):


{% seo %}

Run bundle install, then bundle exec jekyll build. View source on any page — you should see a block of SEO meta tags generated automatically.


Step 2: Configure _config.yml for SEO

These settings feed jekyll-seo-tag:

# _config.yml
title: "Your Site Name"
description: "A clear, 150-character description of what your site is about."
url: "https://yourdomain.com"
baseurl: ""
author: "Your Name"
twitter:
  username: yourhandle
  card: summary_large_image
logo: /assets/images/logo.png
social:
  name: Your Site Name
  links:
    - https://twitter.com/yourhandle
    - https://github.com/yourusername

The url field is critical — it is used to build absolute URLs for canonical tags and Open Graph URLs.


Step 3: Optimise Every Post’s Front Matter

Each post should have these fields:

---
title: "How to Do X: A Complete Guide for 2026"
description: "A 150–160 character description that includes your target keyword and gives users a reason to click."
date: 2026-06-13
last_modified_at: 2026-06-13
image: /assets/images/blog/your-post-image.jpg
author: Your Name
tags:
  - primary keyword
  - secondary keyword
---

Title tips:

  • Include your target keyword near the start
  • Keep under 60 characters
  • Add the year for freshness signals
  • Use power words: “Complete”, “Guide”, “Fast”, “Free”

Description tips:

  • 150–160 characters max
  • Include your primary keyword naturally
  • Write for humans, not bots — the description shows in search results

Step 4: Add a Sitemap

A sitemap tells Google about all the pages on your site.

# Gemfile
gem "jekyll-sitemap"
# _config.yml
plugins:
  - jekyll-sitemap

Your sitemap is automatically generated at /sitemap.xml. Submit it to Google Search Console.

To exclude pages from the sitemap, add to their front matter:

sitemap: false

Step 5: Set Up Canonical URLs

Duplicate content confuses Google. Canonical URLs tell Google which version of a page is the authoritative one.

jekyll-seo-tag handles canonicals automatically using your url setting. Verify by checking the source of a built page for:

<link rel="canonical" href="https://yourdomain.com/your-post/" />

Step 6: Optimise for Core Web Vitals

Google uses Core Web Vitals as a ranking signal. The three metrics are:

  • LCP (Largest Contentful Paint) — How fast the main content loads. Target: under 2.5 seconds.
  • FID/INP (Interaction to Next Paint) — How responsive the page is to clicks. Target: under 200ms.
  • CLS (Cumulative Layout Shift) — How much the layout shifts during load. Target: under 0.1.

Jekyll-specific improvements:

Preload fonts:

<link rel="preload" href="/assets/fonts/your-font.woff2" as="font" type="font/woff2" crossorigin>

Lazy load images:

<img src="image.jpg" loading="lazy" alt="Description" width="800" height="400">

Always include width and height attributes to prevent CLS.

Minify CSS: Add to _config.yml:

sass:
  style: compressed

Defer JavaScript:

<script src="/assets/js/main.js" defer></script>

Step 7: Add Structured Data (Schema Markup)

Structured data helps Google understand your content and can earn rich snippets in search results.

jekyll-seo-tag adds basic Article schema. For more control, add JSON-LD directly to your post layout:


{% if page.layout == "post" %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "{{ page.title | escape }}",
  "description": "{{ page.description | escape }}",
  "datePublished": "{{ page.date | date_to_xmlschema }}",
  "dateModified": "{{ page.last_modified_at | default: page.date | date_to_xmlschema }}",
  "author": {
    "@type": "Person",
    "name": "{{ page.author | default: site.author }}"
  },
  "publisher": {
    "@type": "Organization",
    "name": "{{ site.title }}",
    "logo": {
      "@type": "ImageObject",
      "url": "{{ site.url }}{{ site.logo }}"
    }
  }
}
</script>
{% endif %}


Shorter, keyword-rich URLs rank better than long, dated ones.

Recommended:

# _config.yml
permalink: /blog/:title/

This gives you URLs like /blog/how-to-install-jekyll-theme/ instead of /2026/06/01/how-to-install-jekyll-theme/.

Avoid changing permalink structure on an existing site without setting up 301 redirects — changing URLs resets the SEO value those pages have accumulated.


Step 9: Internal Linking Strategy

Internal links distribute “link equity” across your site and help Google discover content.

Best practices:

  • Link to related posts within your content using descriptive anchor text
  • Add a “Related posts” section at the bottom of each post
  • Link from high-traffic pages (homepage, popular posts) to newer content

In Jekyll, you can link to other posts using post_url:


[How to Install a Jekyll Theme]({% post_url 2026-06-01-how-to-install-jekyll-theme %})

This will throw a build error if the post doesn’t exist, which is helpful for catching broken links.


Step 10: Set Up Google Search Console

  1. Go to Google Search Console
  2. Add your property (use the URL prefix method)
  3. Verify ownership by adding a meta tag to your <head> or uploading an HTML file
  4. Submit your sitemap at yourdomain.com/sitemap.xml
  5. Wait 1–3 days for Google to crawl and index your site

Once indexed, use the Coverage report to find crawl errors and the Performance report to see which queries drive traffic.


Jekyll SEO Plugins Worth Using

Plugin Purpose
jekyll-seo-tag Meta tags, Open Graph, Twitter Cards, JSON-LD
jekyll-sitemap Auto-generated sitemap.xml
jekyll-feed RSS feed for subscribers and search engines
jekyll-redirect-from 301 redirects when you change URLs
jekyll-last-modified-at Accurate last_modified_at dates for structured data

Content Strategy for Jekyll Sites

Technical SEO only gets you so far. Content quality is what drives rankings in 2026.

Target long-tail keywords — Instead of “Jekyll theme”, target “best Jekyll theme for portfolio 2026”. Lower competition, higher intent.

Answer questions completely — Google rewards comprehensive answers. If a topic has 5 sub-questions, answer all 5 in one post.

Update existing posts — Refreshing content with last_modified_at dates signals freshness to Google.

Build backlinks — Share posts in relevant communities (Reddit’s r/webdev, HackerNews, dev.to) to earn inbound links.


Jekyll’s clean HTML and fast load times give you a technical SEO advantage from day one. With the right configuration, you can outrank WordPress sites with far fewer resources.

Ready to start with a well-optimised Jekyll theme? Browse themes on JekyllHub →


References

Share LinkedIn