Catalog / henrymlopez.com
45

SEO audit for henrymlopez.com

Henry M. Lopez – Homepage for a digital problem solver

otherWordPress

Health 45/100 (poor) · 13 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)
Screenshot of henrymlopez.com
13
pages crawled
6
indexable pages
7
errors
34
warnings
79
notices
0
orphan pages
5
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Links 59 5 1 1
Crawlability 92 1 0 1
Sitemap 92 1 0 1
Performance 84 0 7 26
Meta Description 86 0 6 0
Content 88 0 5 4
Budget 91 0 4 0
Indexability 91 0 4 3
Canonical 93 0 3 0
Images 93 0 3 3
Duplicate 98 0 1 0
Agent Readiness 100 0 0 1
Cache 100 0 0 3
Headings 100 0 0 3
Security 100 0 0 14
Social 100 0 0 12
Structured Data 100 0 0 6
URL 100 0 0 1
Findings

Errors (3 rules)

error Broken internal link (target 4xx/5xx)

Rule links.broken_internal · Links · 5 occurrence(s)

error Non-200 URL listed in sitemap

Rule sitemap.not_200 · Sitemap · 1 occurrence(s)

error Client error (4xx) response

Rule status.4xx · Crawlability · 1 occurrence(s)

Warnings (9 rules)

warning Noindex page receives internal links (crawl-budget waste)

Rule budget.noindex_linked · Budget · 4 occurrence(s)

  • https://henrymlopez.com/2020/09/26/hello-world/?replytocom=1 — this noindex page has 2 internal inlink(s) — Googlebot follows them, fetches the page, then drops it unindexed, spending crawl budget for no indexing benefit (and the links leak equity). Remove/redirect the links, or drop the noindex if the page should be indexed. Linked from: https://henrymlopez.com/2020/09/26/hello-world/, https://henrymlopez.com/2020/09/26/hello-world/?replytocom=1.
  • https://henrymlopez.com/wp-admin/ — this noindex page has 1 internal inlink(s) — Googlebot follows them, fetches the page, then drops it unindexed, spending crawl budget for no indexing benefit (and the links leak equity). Remove/redirect the links, or drop the noindex if the page should be indexed. Linked from: https://henrymlopez.com/sample-page/.
  • https://henrymlopez.com/wp-login.php — this noindex page has 9 internal inlink(s) — Googlebot follows them, fetches the page, then drops it unindexed, spending crawl budget for no indexing benefit (and the links leak equity). Remove/redirect the links, or drop the noindex if the page should be indexed. Linked from: https://henrymlopez.com/, https://henrymlopez.com/2020/09/26/hello-world/, https://henrymlopez.com/sample-page/.
  • https://henrymlopez.com/wp-login.php?action=lostpassword — this noindex page has 2 internal inlink(s) — Googlebot follows them, fetches the page, then drops it unindexed, spending crawl budget for no indexing benefit (and the links leak equity). Remove/redirect the links, or drop the noindex if the page should be indexed. Linked from: https://henrymlopez.com/wp-login.php, https://henrymlopez.com/wp-admin/.

warning Missing canonical tag

Rule canonical.missing · Canonical · 3 occurrence(s)

warning Thin content (low word count)

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

warning Homepage duplicated across protocol/host variants (no redirect)

Rule duplicate.protocol_host · Duplicate · 1 occurrence(s)

  • https://henrymlopez.com/ — http://henrymlopez.com/ serves the same homepage content with a 200 and no redirect — Google sees a duplicate. Pick one canonical host/scheme and 301-redirect the others.

warning Images missing alt text

Rule images.missing_alt · Images · 3 occurrence(s)

warning Page is noindex

Rule index.noindex · Indexability · 4 occurrence(s)

warning Internal link points to a redirect

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

  • https://henrymlopez.com/sample-page/ — https://henrymlopez.com/wp-admin/ → https://henrymlopez.com/wp-login.php?redirect_to=https%3A%2F%2Fhenrymlopez.com%2Fwp-admin%2F&reauth=1

warning Render-blocking script in <head> (no defer/async)

Rule perf.render_blocking · Performance · 7 occurrence(s)

Notices (19 rules)

notice No llms.txt for AI agents

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

notice Page served uncached (no-store/private or CDN bypass)

Rule cache.not_cacheable · Cache · 3 occurrence(s)

notice Low text-to-HTML ratio

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

notice noarchive directive (blocks cached copy)

Rule directives.noarchive · Indexability · 3 occurrence(s)

  • https://henrymlopez.com/wp-admin/ — a noarchive directive is present — it blocks a cached copy of the page. Google retired cached links in 2024 so the impact is small, but confirm it's intentional.
  • https://henrymlopez.com/wp-login.php — a noarchive directive is present — it blocks a cached copy of the page. Google retired cached links in 2024 so the impact is small, but confirm it's intentional.
  • https://henrymlopez.com/wp-login.php?action=lostpassword — a noarchive directive is present — it blocks a cached copy of the page. Google retired cached links in 2024 so the impact is small, but confirm it's intentional.

notice Multiple <h1> elements

Rule h1.multiple · Headings · 3 occurrence(s)

notice Likely hero image lacks fetchpriority=high

Rule images.hero_no_fetchpriority · Performance · 3 occurrence(s)

  • https://henrymlopez.com/wp-admin/ — the likely hero/LCP image (wordpresslogo.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://henrymlopez.com/wp-login.php — the likely hero/LCP image (wordpresslogo.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
  • https://henrymlopez.com/wp-login.php?action=lostpassword — the likely hero/LCP image (wordpresslogo.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.

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

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

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

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

  • https://henrymlopez.com/attribution/ — 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 Missing Open Graph tags

Rule og.missing · Social · 6 occurrence(s)

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

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

  • https://henrymlopez.com/wp-admin/ — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://henrymlopez.com/wp-login.php — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://henrymlopez.com/wp-login.php?action=lostpassword — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.

notice No ETag header (no conditional GET for unchanged pages)

Rule perf.no_etag · Performance · 10 occurrence(s)

  • https://henrymlopez.com/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/2020/09/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/2020/09/26/hello-world/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/2020/09/26/hello-world/?replytocom=1 — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/attribution/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/category/uncategorized/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/sample-page/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/wp-admin/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/wp-login.php — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://henrymlopez.com/wp-login.php?action=lostpassword — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.

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

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

  • https://henrymlopez.com/ — 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://henrymlopez.com/2020/09/ — 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://henrymlopez.com/2020/09/26/hello-world/ — 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://henrymlopez.com/2020/09/26/hello-world/?replytocom=1 — 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://henrymlopez.com/attribution/ — 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://henrymlopez.com/category/uncategorized/ — 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://henrymlopez.com/sample-page/ — 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://henrymlopez.com/wp-admin/ — 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://henrymlopez.com/wp-login.php — 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://henrymlopez.com/wp-login.php?action=lostpassword — 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 · 1 occurrence(s)

notice Missing recommended security headers

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

notice target=_blank link without rel=noopener (tab-napping)

Rule security.unsafe_cross_origin_links · Security · 3 occurrence(s)

notice Indexable page not listed in sitemap

Rule sitemap.orphan_not_listed · Sitemap · 1 occurrence(s)

notice Uppercase letters in URL path

Rule url.uppercase · URL · 1 occurrence(s)

Pages (showing 13 of 13)
URLStatusIndexableWordsIn-links
https://henrymlopez.com/
Henry M. Lopez – Homepage for a digital problem solver
200 yes 102 11
https://henrymlopez.com/wp-login.php
Log In ‹ Henry M. Lopez — WordPress
200 no 28 9
https://henrymlopez.com/2020/09/
September 2020 – Henry M. Lopez
200 yes 105 8
https://henrymlopez.com/2020/09/26/hello-world/
Hello world! – Henry M. Lopez
200 yes 185 8
https://henrymlopez.com/category/uncategorized/
Uncategorized – Henry M. Lopez
200 yes 104 8
https://henrymlopez.com/sample-page/
Sample Page – Henry M. Lopez
200 yes 224 8
https://henrymlopez.com/wp-login.php?action=lostpassword
Lost Password ‹ Henry M. Lopez — WordPress
200 no 45 2
https://henrymlopez.com/2020/09/26/hello-world/?replytocom=1
Hello world! – Henry M. Lopez
200 no 189 2
https://henrymlopez.com/wp-admin/
Log In ‹ Henry M. Lopez — WordPress
200 no 28 1
https://henrymlopez.com/attribution/
Attribution – Henry M. Lopez
200 yes 115 1
https://henrymlopez.com/author/Henry%20M.%20Lopez/
Page not found – Henry M. Lopez
404 no 96 5
https://henrymlopez.com/comments/feed/ 200 no 0 8
https://henrymlopez.com/feed/ 200 no 0 8

Audit your own site — free

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

Scan your site →