Eleventy Plugin Baseline

A magic carpet ride

Documentation — Table of Contents

Head & SEO Basics

Add sensible head/SEO defaults with Baseline. You’ll set site-wide metadata, page front matter, see how <baseline-head> renders canonical and OG/Twitter shells, and control indexing. Uses npm, Node 20.15.0+, and the same Baseline setup as earlier tutorials.

What you’ll build

Prerequisites

1) Ensure Baseline is loaded

eleventy.config.js:

import baseline, { config as baselineConfig } from "@apleasantview/eleventy-plugin-baseline";

/** @param {import("@11ty/eleventy").UserConfig} eleventyConfig */
export default function (eleventyConfig) {
  eleventyConfig.addPlugin(baseline());
}

export const config = baselineConfig;

2) Site-wide metadata

Update src/_data/site.js:

export default {
  title: "Baseline Head Demo",
  tagline: "Head & SEO quickstart",
  url: process.env.URL || "http://localhost:8080/",
  defaultLanguage: "en",
  noindex: false
};

3) Head assets

Ensure src/_data/head.js includes your bundles:

export default {
  link: [{ rel: "stylesheet", href: "/assets/css/index.css" }],
  script: [{ src: "/assets/js/index.js", defer: true }]
};

4) Layout with <baseline-head>

Your base layout should include <baseline-head> in <head>. Example:

<!DOCTYPE html>
<html lang="{{ lang | default(site.defaultLanguage) }}">
  <head>
    <baseline-head></baseline-head>
    <meta name="color-scheme" content="light dark">
  </head>
  <body>
    <main id="main">
      {{ content | safe }}
    </main>
    <script>
    const backBtn = document.getElementById("go-back");
    if ( backBtn ) {
      backBtn.addEventListener("click", (event) => {
        event.preventDefault();
        history.back();
      });
    }
    </script>
  </body>
</html>

5) Page front matter

Create src/content/pages/head-demo.md:

---
title: "Head & SEO Demo"
description: "A page showing Baseline head/SEO defaults."
permalink: "/head-demo/"
layout: "layouts/base.njk"
---

This page uses Baseline’s head defaults for canonical, OG, and Twitter meta.

6) Per-page front matter overrides (canonical + social)

Add overrides in the same page front matter:

head:
  canonical: "https://example.com/head-demo/"
  openGraph:
    "og:title": "Custom OG Title"
    "og:image": "https://example.com/assets/social/og-head-demo.jpg"
  twitter:
    "twitter:title": "Custom Twitter Title"
    "twitter:image": "https://example.com/assets/social/twitter-head-demo.jpg"

7) Site-wide noindex (if needed)

8) Run and inspect

npx rimraf dist/ && npm run dev

9) Production build

npx rimraf dist/ && npm run build

10) Next steps

Previous: Assets Pipeline Quickstart

Next: Debugging & Navigator