Kevin D. Graham

SEO Implementation Spec — kevindgraham.com

How to use this: Drop this file in the root of the kevindgraham.github.io repo, then tell Claude Code:

Read seo-implementation-spec.md and work through it phase by phase. Start with Phase 0 and report what you find before making changes. Show me git status and git diff before any commit, and don’t push until I say go.


Phase 0 — Audit before you change anything

Report back on:

  1. Is this a plain static HTML site or Jekyll? (Check for _config.yml, _layouts/, _includes/.)
  2. List every page/route in the site and its current <title> and <meta name="description">.
  3. Does sitemap.xml exist? robots.txt? A CNAME file?
  4. Are there duplicate or missing <h1> tags on any page?
  5. How many images lack alt attributes?
  6. Is any structured data (JSON-LD) already present?

Do not make changes until this audit is reported.


Phase 1 — Technical foundation

robots.txt

Create at site root:

User-agent: *
Allow: /

Sitemap: https://kevindgraham.com/sitemap.xml

sitemap.xml

Canonical URLs

Add a self-referencing canonical to every page:

<link rel="canonical" href="https://kevindgraham.com/PAGE-PATH/">

Pick ONE canonical form (with or without www, with or without trailing slash) and make every internal link match it.

404 page

Create a branded 404.html in the navy/gold palette that links back to the homepage, blog, and toolkit — not a dead end.


Phase 2 — Per-page metadata

For every page, write unique values. No duplicates across the site.

Element Rule
<title> 50–60 characters. Front-load the search term, end with \| Kevin D. Graham
<meta name="description"> 140–160 characters. Written as a hook, not a summary
<h1> Exactly one per page, and it should not be identical to the title tag
<html lang="en"> Present on every page
Heading order H1 → H2 → H3, no skipped levels

Open Graph + Twitter cards

Add to every page so links look right when shared:

<meta property="og:title" content="...">
<meta property="og:description" content="...">
<meta property="og:image" content="https://kevindgraham.com/images/og-default.jpg">
<meta property="og:url" content="https://kevindgraham.com/PAGE-PATH/">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">

Flag if no OG image exists at 1200×630 — that one needs to be designed, not coded.

Images


Phase 3 — Structured data (JSON-LD)

Homepage — Person schema

{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Kevin D. Graham",
  "url": "https://kevindgraham.com",
  "jobTitle": "Digital Media Educator and Content Creator",
  "description": "...",
  "sameAs": ["https://instagram.com/strategicdownloads"]
}

Book page — Book schema

Include name, author, description, bookFormat, and the purchase URL.

Blog posts — Article schema

Include headline, datePublished, dateModified, author, and image.

Any FAQ-style content — FAQPage schema

Only where real Q&A content exists on the page. Don’t fabricate questions to game it.

Validate every block against schema.org’s syntax before committing.


Phase 4 — Internal linking + crawlability


Phase 5 — Performance + accessibility


Phase 6 — Blog scaffolding

If a blog post template exists, make sure every new post automatically gets:

If it doesn’t exist, create the template so future posts inherit all of this without manual work.


Verification checklist

Before pushing, confirm:

Then show git status and git diff, and wait for approval before pushing to main.


What Claude Code CANNOT do — Kevin’s list

These require a human and an account:

  1. Google Search Console — verify the domain, submit the sitemap, request indexing on key pages.
  2. Bing Webmaster Tools — same, five-minute setup.
  3. Google Business Profile — for anything local (photography, local visibility work).
  4. Keyword decisions — what you actually want to rank for. Code can’t pick this.
  5. Writing the content — the blog posts are the engine. Nothing above matters without them.
  6. Backlinks — podcast appearances, guest posts, directory listings, book retailer pages.