SEO Report
SEO Report
Date: 2025-09-21
Checklist Summary
| Item | Before | After | Notes |
|---|---|---|---|
| Robots.txt | Allowed all crawling without sitemap guarantee | Explicitly allows crawling, references sitemap | Updated robots.txt to match Google guidance. |
| Sitemap | Plugin enabled but unchecked | jekyll-sitemap confirmed and validated in CI |
seo-checks.rb fails build if sitemap missing. |
| Titles & Descriptions | Several navigation pages used lowercase titles shared with H1 | Descriptive titles with separate navigation labels and headings | Added nav_title/heading to avoid nav regressions while improving SEO titles. |
| Canonical Tags | Managed by jekyll-seo-tag without verification |
Local HTTP validation for every canonical URL | build/seo-checks.rb serves _site locally and checks for HTTP 200. |
| Status Codes | Manual spot checks only | Automated crawl of built site | CI runs Lychee plus canonical validation and records results in seo-checks.json. |
| Structured Data | WebSite markup emitted but missing organization context | WebSite + Organization + BlogPosting JSON-LD with accurate profile data | Added organization metadata and live search target URL. |
| Performance Hints | No resource preloads or asset sizing | Preload hero CSS/image, logo sized, lazy loading applied | Reduces layout shift and speeds first render. |
Discovery & Crawlability
robots.txtnow follows Google’s recommended syntax and advertiseshttps://scripts.lukeleigh.com/sitemap.xml.jekyll-sitemapremains enabled; CI verifies_site/sitemap.xmlis generated and extracts 834 canonical URLs.- Added a reusable
build/seo-checks.rbscript that spins up a local WEBrick server to confirm all canonical URLs resolve with HTTP 200 and that no meta refresh directives ship.
Indexability & Rendering
- Navigation and landing pages received descriptive titles (
PowerShell Scripts | Maintenance Scripts, etc.) plus dedicatedheading/nav_titlefront matter so templates keep short labels. - 404 page and private HTML embeds (
assets/*Home.html) setrobots: noindexto prevent soft-404s in search results. - Template page
_pages/content/New-Topic.mdis unpublished and excluded from the sitemap. - Updated
_includes/head.htmlto preload the primary stylesheet and hero teasers when available.
Structured Data Coverage
_includes/structured-data.htmlnow receivesorganizationdetails from_config.yml, enabling bothWebSiteandOrganizationJSON-LD. Posts continue to emitBlogPostingentities.- Configured
search_urlto point at a Google site search query so theSearchActiontarget is valid.
Pages with Adjusted Indexing
| URL | Action | Reason |
|---|---|---|
/404.html |
noindex,follow |
Avoid indexing error page. |
/assets/KarenHome.html |
noindex,nofollow |
Embedded Google Map not intended for search. |
/assets/LukeHome.html |
noindex,nofollow |
Embedded Google Map not intended for search. |
/assets/MarkHome.html |
noindex,nofollow |
Embedded Google Map not intended for search. |
_pages/content/New-Topic.md |
published: false, noindex |
Editorial template only. |
The sitemap continues to list canonical, indexable URLs only (834 entries in the latest build).
Internal Linking & URL Hygiene
- Sidebar navigation now prefers
nav_titlevalues so we can use richer document titles without bloating anchor text. - All automatically generated links run through
relative_urlto avoid protocol or host mismatches.
Automation & CI
.github/workflows/jekyll-build.ymlnow instructs Lychee to output JSON, runsbundle exec ruby build/seo-checks.rb, and uploads bothlychee-report.jsonandseo-checks.jsonartifacts for review.build/seo-checks.rbrecords sitemap presence, canonical status codes, meta robot rules, and any warnings in machine-readable form. Run locally with:bundle exec jekyll build --future bundle exec ruby build/seo-checks.rb cat seo-checks.json
Remaining Follow-Ups
- Many legacy posts rely on automatically generated excerpts for descriptions. They render well, but adding hand-written summaries would further improve CTR.
- Large hero media (GIF/MP4) could be compressed in a future pass to shave additional kilobytes.
Google Search Console Recommendations
- Verify the property for
https://scripts.lukeleigh.com/(Domain property if available). - Navigate to Index → Sitemaps and submit
https://scripts.lukeleigh.com/sitemap.xml. Confirm Google reports the submission as “Success”. - Use URL Inspection on key templates:
https://scripts.lukeleigh.com/https://scripts.lukeleigh.com/menu/_pages/scripts.htmlhttps://scripts.lukeleigh.com/scripts/active-directory-information/(sample post)
- For each, click View Crawled Page to confirm Google sees the canonical you expect and that structured data is detected.
- Spot-check
https://scripts.lukeleigh.com/404.htmlto ensure Search Console confirms thenoindexdirective.
Validation Snapshot
- Latest local run: 834 URLs in sitemap, 832 HTML documents scanned, 0 canonical HTTP errors, and 0 unexpected
noindexpages (seeseo-checks.json). - CI artifacts
seo-reports/seo-checks.jsonandseo-reports/lychee-report.jsonretain machine-readable outputs for each build.
Maintenance Scripts