Catalog / mikelowe.xyz
65

SEO audit for mikelowe.xyz

Mike Lowe

otherHugo

Health 65/100 (fair) · 11 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)

Lead Software Engineer at Kraken Technologies

11
pages crawled
11
indexable pages
0
errors
29
warnings
84
notices
4
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Links 73 0 10 1
Content 81 0 7 16
Duplicate 84 0 6 7
Structured Data 89 0 4 8
Performance 95 0 2 13
Agent Readiness 100 0 0 1
Crawlability 100 0 0 2
Images 100 0 0 3
Meta Description 100 0 0 9
Security 100 0 0 11
Social 100 0 0 11
Titles 100 0 0 2
Findings

Warnings (7 rules)

warning Thin content (low word count)

Rule content.thin · Content · 7 occurrence(s)

warning Duplicate page content

Rule duplicate.content · Duplicate · 2 occurrence(s)

warning Duplicate <title> across pages

Rule duplicate.title · Duplicate · 4 occurrence(s)

warning Hero/LCP image is lazy-loaded (loading=lazy delays LCP)

Rule images.no_lazy_lcp_candidate · Performance · 2 occurrence(s)

  • https://mikelowe.xyz/writings/keep-those-prs-small/ — the likely hero/LCP image (main.png) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.
  • https://mikelowe.xyz/writings/seven-languages-in-seven-weeks/ — the likely hero/LCP image (main.jpg) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.

warning Orphan page (no internal inlinks)

Rule links.orphan · Links · 4 occurrence(s)

warning Internal link points to a redirect

Rule links.redirect_target · Links · 6 occurrence(s)

warning BreadcrumbList present but structurally incomplete

Rule schema.breadcrumb_incomplete · Structured Data · 4 occurrence(s)

  • https://mikelowe.xyz/projects — a BreadcrumbList is present but structurally incomplete — missing required itemListElement. Give itemListElement at least 2 ListItems, each with a sequential integer position and a name, and an item URL on every entry except the last.
  • https://mikelowe.xyz/projects/ — a BreadcrumbList is present but structurally incomplete — missing required itemListElement. Give itemListElement at least 2 ListItems, each with a sequential integer position and a name, and an item URL on every entry except the last.
  • https://mikelowe.xyz/writings — a BreadcrumbList is present but structurally incomplete — missing required itemListElement. Give itemListElement at least 2 ListItems, each with a sequential integer position and a name, and an item URL on every entry except the last.
  • https://mikelowe.xyz/writings/ — a BreadcrumbList is present but structurally incomplete — missing required itemListElement. Give itemListElement at least 2 ListItems, each with a sequential integer position and a name, and an item URL on every entry except the last.

Notices (18 rules)

notice No llms.txt for AI agents

Rule agent.llms_txt_missing · Agent Readiness · 1 occurrence(s)

  • https://mikelowe.xyz/ — no llms.txt found at the site root — add one so AI agents get a curated site summary

notice Low text-to-HTML ratio

Rule content.low_ratio · Content · 5 occurrence(s)

notice Duplicate meta description across pages

Rule duplicate.meta_desc · Duplicate · 7 occurrence(s)

notice Image filename is generic/auto-generated (missed image-search signal)

Rule images.generic_filename · Images · 1 occurrence(s)

  • https://mikelowe.xyz/writings/keep-those-prs-small/ — 7 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.

notice Images without width/height (layout shift / CLS)

Rule images.missing_dimensions · Images · 2 occurrence(s)

notice Page has only one internal inlink (fragile crawl path)

Rule links.single_inlink · Links · 1 occurrence(s)

  • https://mikelowe.xyz/projects — only one internal link points here — if that source changes, this page becomes an orphan. Add more contextual internal links to strengthen the crawl path.

notice Legacy <meta name=keywords> tag present (Google ignores it)

Rule meta.keywords_present · Content · 11 occurrence(s)

notice Meta description too long

Rule meta_desc.too_long · Meta Description · 2 occurrence(s)

notice Meta description too short

Rule meta_desc.too_short · Meta Description · 7 occurrence(s)

notice Legacy image format (jpg/png/gif) with no next-gen fallback

Rule perf.images_legacy_format · Performance · 2 occurrence(s)

notice No Last-Modified header (no conditional GET for unchanged pages)

Rule perf.no_last_modified · Performance · 11 occurrence(s)

  • https://mikelowe.xyz/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/categories/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/projects — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/projects/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/tags/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/writings — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/writings/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/writings/into-the-multiverse/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/writings/keep-those-prs-small/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/writings/see-you-in-a-few-weeks/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://mikelowe.xyz/writings/seven-languages-in-seven-weeks/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.

notice URL redirects to another URL

Rule redirect.single · Crawlability · 2 occurrence(s)

notice Article schema missing recommended properties (Top Stories / image carousel)

Rule schema.article_incomplete · Structured Data · 6 occurrence(s)

  • https://mikelowe.xyz/projects — BlogPosting structured data is missing recommended property (image) — these feed Top Stories and image-carousel eligibility. Google defines no required Article properties, so this is advisory: add author, headline, image and datePublished where they apply.
  • https://mikelowe.xyz/projects/ — BlogPosting structured data is missing recommended property (image) — these feed Top Stories and image-carousel eligibility. Google defines no required Article properties, so this is advisory: add author, headline, image and datePublished where they apply.
  • https://mikelowe.xyz/writings/into-the-multiverse/ — BlogPosting structured data is missing recommended property (image) — these feed Top Stories and image-carousel eligibility. Google defines no required Article properties, so this is advisory: add author, headline, image and datePublished where they apply.
  • https://mikelowe.xyz/writings/keep-those-prs-small/ — BlogPosting structured data is missing recommended property (image) — these feed Top Stories and image-carousel eligibility. Google defines no required Article properties, so this is advisory: add author, headline, image and datePublished where they apply.
  • https://mikelowe.xyz/writings/see-you-in-a-few-weeks/ — BlogPosting structured data is missing recommended property (image) — these feed Top Stories and image-carousel eligibility. Google defines no required Article properties, so this is advisory: add author, headline, image and datePublished where they apply.
  • https://mikelowe.xyz/writings/seven-languages-in-seven-weeks/ — BlogPosting structured data is missing recommended property (image) — these feed Top Stories and image-carousel eligibility. Google defines no required Article properties, so this is advisory: add author, headline, image and datePublished where they apply.

notice No structured data detected

Rule schema.none · Structured Data · 2 occurrence(s)

notice Missing recommended security headers

Rule security.missing_headers · Security · 11 occurrence(s)

notice Title tag is identical to the H1 (missed keyword variation)

Rule title.same_as_h1 · Titles · 1 occurrence(s)

  • https://mikelowe.xyz/ — the <title> and the H1 are identical — differentiate them to cover more query variation

notice Title is very short

Rule title.too_short · Titles · 1 occurrence(s)

Pages (showing 11 of 11)
URLStatusIndexableWordsIn-links
https://mikelowe.xyz/
Mike Lowe
200 yes 19 11
https://mikelowe.xyz/writings
Writings | Mike Lowe
200 yes 214 5
https://mikelowe.xyz/projects
Projects | Mike Lowe
200 yes 76 1
https://mikelowe.xyz/writings/into-the-multiverse/
Into the Multiverse | Mike Lowe
200 yes 26 2
https://mikelowe.xyz/writings/keep-those-prs-small/
Keep those PRs small! | Mike Lowe
200 yes 1695 2
https://mikelowe.xyz/writings/see-you-in-a-few-weeks/
See you in a few weeks | Mike Lowe
200 yes 29 2
https://mikelowe.xyz/writings/seven-languages-in-seven-weeks/
Recommendation: Seven Languages in Seven Weeks | Mike Lowe
200 yes 1070 2
https://mikelowe.xyz/categories/
Categories | Mike Lowe
200 yes 10 0
https://mikelowe.xyz/projects/
Projects | Mike Lowe
200 yes 76 0
https://mikelowe.xyz/tags/
Tags | Mike Lowe
200 yes 10 0
https://mikelowe.xyz/writings/
Writings | Mike Lowe
200 yes 214 0

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →