Generated 2026-02-22 after a full audit of templates, meta tags, structured data, content pages, and build config. Items are grouped by priority. Each item is a self-contained task an AI agent can pick up and execute.
Where: _includes/base.njk <head>
Status: ✅ Done (2026-02-22)
Currently there is no <link rel="canonical">. Without it, search engines may index duplicate URLs (trailing slashes, query params, www vs non-www).
Action: Add a canonical link tag in the <head> of base.njk:
<link rel="canonical" href="https://risenword.org/SEO-IMPROVEMENTS/">
Where: _includes/base.njk <head>
The site has og:title, og:description, and og:url but is missing:
og:type (should be "website" for most pages, "article" for poems)og:image (a default share image for the site — critical for social previews)og:site_nameog:localetwitter:card, twitter:title, twitter:description, twitter:image)Action:
/images/og-default.jpg.<head> in base.njk:<meta property="og:type" content="website">
<meta property="og:site_name" content="Risen Word">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://risenword.org/images/og-default.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Risen Word">
<meta name="twitter:description" content="Original poems by family and friends, shared to inspire and uplift.">
<meta name="twitter:image" content="https://risenword.org/images/og-default.jpg">
description Front Matter to Every PoemWhere: Each file in poems/2025/*.md (and future years)
Status: ✅ Done (2026-02-22)
Most poems have no description field. The base template falls back to site.description, so every poem page shares the same meta description — a major duplicate-content signal.
Action: Add a 1–2 sentence description to the front matter of every poem. Example for hope.md:
description: "A short-form Easter poem by Jennie Compton exploring the resilience of hope and divine light."
Files to update (all in poems/2025/):
ballad-of-grace.mdbestie-for-the-restie.mdchoose-to-love.mdconversion-story.mdeaster-glory.mdeaster-poem.mdeasters-miracle.mdempty-tomb.mdgrateful-glow.mdhello.mdhope.mdin-listening.mdinto-light.mdmorning-light.mdmy-favorite-light.mdrebirth.mdrechristened.mdresurrection-spring.mdrise.mdsomeone-like-me.mdturn.mdyounnukorns.md<title> Tag Pattern for PoemsWhere: _includes/base.njk
Status: ✅ Done (2026-02-22)
Current pattern: Risen Word | Hope
Best practice for content-heavy pages is Page Title | Site Name (page-specific first). Also, poem titles should include the author for long-tail keyword benefit.
Action: Update the <title> tag in base.njk:
<title>Risen Word — A collection of poetry celebrating the Risen Word: Jesus Christ.</title>
Where: _includes/poem.njk
Status: ✅ Done (2026-02-22)
The poem template currently uses basic Schema.org microdata (itemscope, itemprop). JSON-LD is Google's preferred format and allows richer data.
Action: Add a <script type="application/ld+json"> block inside poem.njk:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CreativeWork",
"name": "",
"author": {
"@type": "Person",
"name": ""
},
"datePublished": "2026-02-22",
"description": "Original poems by family and friends, shared to inspire and uplift.",
"inLanguage": "en",
"genre": "Poetry",
"isPartOf": {
"@type": "WebSite",
"name": "Risen Word",
"url": "https://risenword.org"
}
}
</script>
Where: _includes/base.njk (global, or homepage only)
Status: ✅ Done (2026-02-22)
Action: Add site-level structured data so Google can build a knowledge panel and show sitelinks:
description Front Matter to Non-Poem PagesWhere: Multiple files
Status: ✅ Done (2026-02-22)
The following pages have no description and will all share the generic site description:
| File | Suggested description |
|---|---|
poems.njk |
"Browse all Easter poems in the Risen Word collection, sorted alphabetically." |
categories/index.njk |
"Explore Risen Word poems by category: Short Form and Long Form Easter poetry." |
years/index.njk |
"Browse Risen Word Easter poems by contest year." |
contests/2025.md |
"Results and winning poems from the 2025 Risen Word Easter Poetry Contest." |
404.html |
(add description: "Page not found" — minor but avoids the global description) |
index.md |
"The Risen Word is a collection of original Christian poetry celebrating Jesus Christ's resurrection. Enter our annual Easter poetry contest." |
Action: Add a description field to the front matter of each file listed above.
Where: poems.njk, category.njk, author.njk, year.njk, categories/index.njk, years/index.njk
These pages use <h1> for the page title but then jump to <h3> inside the macro poemListItem. The <h3> should be <h2> or the list items should not use heading elements at all (a styled <span> or <strong> is fine for list items).
Action: In _includes/_macros/poems.njk, change the <h3> inside poemListItem to a non-heading element (e.g., <span> with the same classes), since these are navigation links, not section headings.
Where: New file, e.g., about.md
Status: ✅ Done (2026-02-22)
There is an /about/ folder in _site/ but no source file is visible. The site needs a keyword-rich "About" page explaining the mission, targeting keywords like "Christian poetry", "Easter poems", "resurrection poetry", "poetry contest".
Action: Create about.md with front matter and 200–400 words of content covering the mission, history, and what makes the collection unique.
font-display: swap to Custom Font DeclarationsWhere: assets/styles/index.css
Status: ✅ Done (2026-02-22)
The two @font-face declarations for TAN Mon Cheri and Beautifully Delicious do not include font-display: swap. This means the browser may hide text until fonts load, hurting both CLS (Cumulative Layout Shift) and perceived performance (which Google factors into ranking).
Action: Add font-display: swap; to both @font-face rules in index.css.
Where: _includes/base.njk, assets/styles/index.css
The site loads Crimson Text and Playfair Display from fonts.googleapis.com. This creates:
Action:
@font-face declarations in index.css (with font-display: swap).<link> from base.njk.Where: _includes/base.njk <head>
Status: ✅ Done (2026-02-22)
If you choose NOT to self-host, at minimum add a preconnect:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
Place these before the Google Fonts stylesheet link.
Where: site.webmanifest
Status: ✅ Done (2026-02-22)
The manifest currently has empty name and short_name fields. These are used by browsers and can also appear in search.
Action: Update to:
{
"name": "Risen Word",
"short_name": "Risen Word",
"icons": [...],
"theme_color": "#ff6f61",
"background_color": "#f9f7f3",
"display": "standalone",
"start_url": "/",
"description": "A poetry collection celebrating the Risen Word: Jesus Christ."
}
alt Text Infrastructure for Future ImagesWhere: Templates, content files
Currently the site has very few images, but as it grows, every <img> should have descriptive alt text. Establish a convention now.
Action: Add a note in the copilot instructions or a CONTRIBUTING.md that all images must include alt attributes with descriptive text.
Where: 404.html
The 404 page is a standalone HTML document with its own <head>, styles, and fonts — it doesn't use base.njk. This means it lacks all the meta tags, structured data, and nav. While 404s aren't indexed, a consistent experience helps users find their way back.
Action: Refactor 404.html to extend base.njk (like other pages), keeping the fun animation but inheriting the nav and footer.
lastmod / updated Front Matter to ContentWhere: Poem markdown files, contest pages
The sitemap template supports updated front matter for <lastmod>, but no content files use it. Google values accurate last-modified dates.
Action: Add updated: YYYY-MM-DD front matter to any page that has been modified since its initial publish date. For poems that haven't changed, this can be omitted (the date field is used as fallback).
Where: Poem pages, contest pages, homepage
Status: ✅ Done (2026-02-22)
Currently, individual poem pages only link to the previous/next poem. They don't link back to the author page, category page, or contest year page — all of which would strengthen the internal link graph.
Action: In _includes/poem.njk, add contextual links below the poem:
<div class="mt-4 text-sm text-gray-600">
<a href="/authors/undefined/">More poems by </a> ·
<a href="/categories/undefined/"> poems</a> ·
<a href="/years//"> contest</a>
</div>
Where: _includes/base.njk or individual layouts
Breadcrumbs improve both UX and SEO (Google shows them in search results).
Action:
Home > Poems > The Ballad of Grace.BreadcrumbList JSON-LD structured data to support rich results.Where: Eleventy config, new template
Poems already have tags in front matter (e.g., ["2025", "long-form"]), but there are no dedicated tag pages. Creating individual tag pages (e.g., /tags/long-form/) expands the site's indexable surface area and targets more keyword variations.
Action:
tag.njk pagination template (similar to category.njk).resurrection, grace, hope, Easter morning).Where: New content directory
A blog with posts about Easter, poetry craft, or devotional reflections would:
Action: Consider creating a blog/ directory with markdown posts and a listing page.
Where: submit.md
Status: ✅ Done (2026-02-22)
The submission iframe already has loading="lazy" ✅, but it lacks a width and height attribute in proper HTML units, which hurts CLS.
Action: Add explicit width and height attributes (e.g., width="640" height="2200") so the browser can reserve space before the iframe loads.
rel="noopener noreferrer" to All External LinksWhere: All templates and content files
Status: ✅ Done (2026-02-22)
Some links already have this (e.g., in submit.md), but it should be consistent across the site for security and minor SEO benefit.
Action: Audit all target="_blank" links and ensure they include rel="noopener noreferrer".
Action: Verify the site in Google Search Console and submit https://risenword.org/sitemap.xml.
Action: Add a privacy-friendly analytics solution to track organic search traffic and identify top-performing pages.
Action: Run Lighthouse audits on the homepage and a poem page. Focus on:
Action: Once Search Console is set up, monitor LCP, FID/INP, and CLS regularly.
Action: Submit the site to Christian poetry directories, church newsletters, and relevant community sites. Each quality backlink significantly boosts domain authority.
| File | Tasks |
|---|---|
_includes/base.njk |
1.1, 1.2, 1.4, 2.2, 3.2, 4.2 |
_includes/poem.njk |
2.1, 4.1 |
_includes/_macros/poems.njk |
2.4 |
poems/2025/*.md (all 22 files) |
1.3, 3.6 |
poems.njk |
2.3 |
categories/index.njk |
2.3 |
years/index.njk |
2.3 |
contests/2025.md |
2.3 |
index.md |
2.3 |
assets/styles/index.css |
2.6, 3.1 |
site.webmanifest |
3.3 |
404.html |
3.5 |
submit.md |
4.5 |
_data/site.json |
(no changes needed — already well-structured) |
eleventy.config.js |
4.3 (if adding tag pages) |
| New files | about.md (2.5), tag.njk (4.3), OG image (1.2) |