Catalog / johnturcios.com
66

SEO audit for johnturcios.com

John Turcios

otherWordPress

Health 66/100 (fair) · 48 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)
48
pages crawled
47
indexable pages
0
errors
295
warnings
580
notices
2
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Agent Readiness 71 0 47 49
Meta Description 71 0 47 0
Performance 71 0 47 192
Headings 71 0 46 0
Links 76 0 39 39
Content 85 0 24 52
Duplicate 86 0 23 0
Images 89 0 17 47
Canonical 98 0 4 0
Crawlability 99 0 1 6
Security 100 0 0 49
Social 100 0 0 94
Structured Data 100 0 0 47
Titles 100 0 0 1
URL 100 0 0 4
Findings

Warnings (13 rules)

warning Control has no accessible name

Rule agent.control_no_name · Agent Readiness · 47 occurrence(s)

warning Duplicate page content

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

warning Near-duplicate page content

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

warning Duplicate <title> across pages

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

warning Images missing alt text

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

warning Orphan page (no internal inlinks)

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

warning Internal link points to a redirect

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

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

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

warning Redirect chain (multiple hops)

Rule redirect.chain · Crawlability · 1 occurrence(s)

Notices (22 rules)

notice Heading levels skip a level

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

notice No llms.txt for AI agents

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

notice No main landmark for AI agents

Rule agent.no_main_landmark · Agent Readiness · 47 occurrence(s)

notice Main text is hard to read (low Flesch Reading Ease)

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

  • http://johnturcios.com/blog/portfolio/wienerschnitzel/ — this page reads as difficult (Flesch Reading Ease 42, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://johnturcios.com/blog/portfolio/hyundaihighways/ — this page reads as difficult (Flesch Reading Ease 47, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://johnturcios.com/blog/portfolio/wienerschnitzel/ — this page reads as difficult (Flesch Reading Ease 42, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://johnturcios.com/blog/portfolio_categories/photography/ — this page reads as difficult (Flesch Reading Ease 37, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.
  • https://johnturcios.com/blog/portfolio_categories/portfolio/ — this page reads as difficult (Flesch Reading Ease 39, below 50) — long sentences and multi-syllable words make it hard to scan. Shorten sentences and prefer plainer words to widen your audience. Density can be legitimate for expert, technical or legal content, so judge it against who the page is for.

notice Likely hero image lacks fetchpriority=high

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

  • https://johnturcios.com/ — the likely hero/LCP image (site-logo.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://johnturcios.com/about-me/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/argentina/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/bonneville/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/ceramics/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/chase/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/dyson/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/hawaii/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/hotwheels/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/hyundaihighways/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/ilasikbackinfocus/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/invisalign/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/madrid/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/publicstorage/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/southwestairlinesconnect/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/table/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/the-eye/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/the-win/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/tokyo/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/toshiba/ — the likely hero/LCP image (site-logo.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://johnturcios.com/blog/portfolio/uruguay/ — the likely hero/LCP image (site-logo.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://johnturcios.com/contact/ — the likely hero/LCP image (site-logo.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://johnturcios.com/photography/ — the likely hero/LCP image (site-logo.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://johnturcios.com/portfolio/ — the likely hero/LCP image (site-logo.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://johnturcios.com/projects/ — the likely hero/LCP image (site-logo.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 · 47 occurrence(s)

notice Internal link has no anchor text / accessible name

Rule links.no_anchor_text · Links · 33 occurrence(s)

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

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

notice Missing Open Graph tags

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

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

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

  • https://johnturcios.com/ — 9 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://johnturcios.com/about-me/ — 5 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://johnturcios.com/blog/portfolio/argentina/ — 16 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://johnturcios.com/blog/portfolio/bonneville/ — 32 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://johnturcios.com/blog/portfolio/ceramics/ — 11 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://johnturcios.com/blog/portfolio/chase/ — 5 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://johnturcios.com/blog/portfolio/dyson/ — 5 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://johnturcios.com/blog/portfolio/hawaii/ — 14 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://johnturcios.com/blog/portfolio/hotwheels/ — 8 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://johnturcios.com/blog/portfolio/hyundaihighways/ — 5 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://johnturcios.com/blog/portfolio/ilasikbackinfocus/ — 5 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://johnturcios.com/blog/portfolio/invisalign/ — 6 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://johnturcios.com/blog/portfolio/madrid/ — 15 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://johnturcios.com/blog/portfolio/publicstorage/ — 5 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://johnturcios.com/blog/portfolio/southwestairlinesconnect/ — 5 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://johnturcios.com/blog/portfolio/table/ — 5 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://johnturcios.com/blog/portfolio/the-eye/ — 5 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://johnturcios.com/blog/portfolio/the-win/ — 5 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://johnturcios.com/blog/portfolio/tokyo/ — 23 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://johnturcios.com/blog/portfolio/toshiba/ — 5 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://johnturcios.com/blog/portfolio/uruguay/ — 16 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://johnturcios.com/contact/ — 5 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://johnturcios.com/photography/ — 14 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://johnturcios.com/portfolio/ — 20 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://johnturcios.com/projects/ — 11 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 · 47 occurrence(s)

  • https://johnturcios.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://johnturcios.com/about-me/ — 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://johnturcios.com/blog/portfolio/argentina/ — 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://johnturcios.com/blog/portfolio/bonneville/ — 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://johnturcios.com/blog/portfolio/ceramics/ — 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://johnturcios.com/blog/portfolio/chase/ — 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://johnturcios.com/blog/portfolio/dyson/ — 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://johnturcios.com/blog/portfolio/hawaii/ — 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://johnturcios.com/blog/portfolio/hotwheels/ — 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://johnturcios.com/blog/portfolio/hyundaihighways/ — 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://johnturcios.com/blog/portfolio/ilasikbackinfocus/ — 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://johnturcios.com/blog/portfolio/invisalign/ — 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://johnturcios.com/blog/portfolio/madrid/ — 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://johnturcios.com/blog/portfolio/publicstorage/ — 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://johnturcios.com/blog/portfolio/southwestairlinesconnect/ — 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://johnturcios.com/blog/portfolio/table/ — 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://johnturcios.com/blog/portfolio/the-eye/ — 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://johnturcios.com/blog/portfolio/the-win/ — 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://johnturcios.com/blog/portfolio/tokyo/ — 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://johnturcios.com/blog/portfolio/toshiba/ — 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://johnturcios.com/blog/portfolio/uruguay/ — 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://johnturcios.com/contact/ — 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://johnturcios.com/photography/ — 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://johnturcios.com/portfolio/ — 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://johnturcios.com/projects/ — 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 · 47 occurrence(s)

  • https://johnturcios.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://johnturcios.com/about-me/ — 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://johnturcios.com/blog/portfolio/argentina/ — 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://johnturcios.com/blog/portfolio/bonneville/ — 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://johnturcios.com/blog/portfolio/ceramics/ — 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://johnturcios.com/blog/portfolio/chase/ — 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://johnturcios.com/blog/portfolio/dyson/ — 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://johnturcios.com/blog/portfolio/hawaii/ — 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://johnturcios.com/blog/portfolio/hotwheels/ — 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://johnturcios.com/blog/portfolio/hyundaihighways/ — 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://johnturcios.com/blog/portfolio/ilasikbackinfocus/ — 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://johnturcios.com/blog/portfolio/invisalign/ — 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://johnturcios.com/blog/portfolio/madrid/ — 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://johnturcios.com/blog/portfolio/publicstorage/ — 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://johnturcios.com/blog/portfolio/southwestairlinesconnect/ — 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://johnturcios.com/blog/portfolio/table/ — 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://johnturcios.com/blog/portfolio/the-eye/ — 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://johnturcios.com/blog/portfolio/the-win/ — 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://johnturcios.com/blog/portfolio/tokyo/ — 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://johnturcios.com/blog/portfolio/toshiba/ — 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://johnturcios.com/blog/portfolio/uruguay/ — 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://johnturcios.com/contact/ — 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://johnturcios.com/photography/ — 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://johnturcios.com/portfolio/ — 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://johnturcios.com/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.

notice URL redirects to another URL

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

notice Missing recommended security headers

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

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

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

  • https://johnturcios.com/about-me/ — 5 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://johnturcios.com/contact/ — 4 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".

notice Title is very short

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

notice Uppercase letters in URL path

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

Pages (showing 48 of 48)
URLStatusIndexableWordsIn-links
https://johnturcios.com/
John Turcios
200 yes 154 47
https://johnturcios.com/about-me/
Who Me? – John Turcios
200 yes 342 47
https://johnturcios.com/contact/
Contact – John Turcios
200 yes 143 47
https://johnturcios.com/photography/
EYE SNAPS – John Turcios
200 yes 147 47
https://johnturcios.com/portfolio/
THE GRIND – John Turcios
200 yes 164 47
https://johnturcios.com/projects/
AFTER HOURS – John Turcios
200 yes 150 47
http://johnturcios.com/portfolio
THE GRIND – John Turcios
200 yes 164 19
https://johnturcios.com/blog/portfolio/header-images/
HEADER IMAGES – John Turcios
200 yes 298 5
https://johnturcios.com/blog/portfolio/the-win/
THE WIN – John Turcios
200 yes 229 5
https://johnturcios.com/blog/portfolio/table/
Furniture – John Turcios
200 yes 324 5
https://johnturcios.com/blog/portfolio/the-eye/
DO & DO MORE – John Turcios
200 yes 167 5
http://johnturcios.com/photography/
EYE SNAPS – John Turcios
200 yes 147 9
https://johnturcios.com/blog/portfolio/ceramics/
Ceramics – John Turcios
200 yes 139 4
https://johnturcios.com/blog/portfolio/malicious-mouse/
Malicious Mouse – John Turcios
200 yes 192 4
https://johnturcios.com/blog/portfolio/hyundai-questioneverything/
Hyundai Tucson – John Turcios
200 yes 262 7
https://johnturcios.com/blog/portfolio/taiwan/
TAIWAN – John Turcios
200 yes 139 5
https://johnturcios.com/blog/portfolio/uruguay/
Uruguay – John Turcios
200 yes 139 5
https://johnturcios.com/blog/portfolio/hyundai-santa-fe/
Hyundai Santa Fe – John Turcios
200 yes 215 7
https://johnturcios.com/blog/portfolio/madrid/
Madrid – John Turcios
200 yes 140 5
https://johnturcios.com/blog/portfolio/utah/
UTAH – John Turcios
200 yes 139 5
https://johnturcios.com/blog/portfolio/argentina/
Argentina – John Turcios
200 yes 139 5
https://johnturcios.com/blog/portfolio/tokyo/
TOKYO – John Turcios
200 yes 139 5
https://johnturcios.com/blog/portfolio/bonneville/
Bonneville – John Turcios
200 yes 141 5
https://johnturcios.com/blog/portfolio/southwest-airlines/
Southwest Airlines – John Turcios
200 yes 240 7
https://johnturcios.com/blog/portfolio/dyson/
Dyson – John Turcios
200 yes 210 7
https://johnturcios.com/blog/portfolio/southwestairlinesconnect/
Southwest Airlines – John Turcios
200 yes 223 7
http://johnturcios.com/blog/portfolio/meatsdayoff-org-psa/
Meatsdayoff.org PSA – John Turcios
200 yes 224 1
http://johnturcios.com/blog/portfolio/publicstorage/
Public Storage – John Turcios
200 yes 250 1
http://johnturcios.com/blog/portfolio/wienerschnitzel/
Wienerschnitzel – John Turcios
200 yes 319 1
http://johnturcios.com/projects/
AFTER HOURS – John Turcios
200 yes 150 6
https://johnturcios.com/blog/portfolio/wienerschnitzel/
Wienerschnitzel – John Turcios
200 yes 319 6
https://johnturcios.com/blog/portfolio/publicstorage/
Public Storage – John Turcios
200 yes 250 6
https://johnturcios.com/blog/portfolio/ilasikbackinfocus/
Abbott iLasik – John Turcios
200 yes 235 6
https://johnturcios.com/blog/portfolio/alaska/
ALASKA – John Turcios
200 yes 139 4
https://johnturcios.com/blog/portfolio/hawaii/
Hawaii – John Turcios
200 yes 139 4
https://johnturcios.com/blog/portfolio/hotwheels/
Hot Wheels – John Turcios
200 yes 225 6
https://johnturcios.com/blog/portfolio/hyundaihighways/
Hyundai Highways – John Turcios
200 yes 328 6
https://johnturcios.com/blog/portfolio/toshiba/
Toshiba – John Turcios
200 yes 242 6
https://johnturcios.com/blog/portfolio/ac-dc-tequila/
AC⚡DC TEQUILA – John Turcios
200 yes 267 6
https://johnturcios.com/blog/portfolio/invisalign/
Invisalign – John Turcios
200 yes 175 6
https://johnturcios.com/blog/portfolio/meatsdayoff-org-psa/
Meatsdayoff.org PSA – John Turcios
200 yes 224 5
https://johnturcios.com/blog/portfolio/chase/
Chase – John Turcios
200 yes 222 5
https://johnturcios.com/blog/portfolio_categories/projects/
Projects – John Turcios
200 yes 173 1
https://johnturcios.com/blog/portfolio_categories/photography/
Photography – John Turcios
200 yes 176 1
https://johnturcios.com/blog/portfolio_categories/portfolio/
Portfolio – John Turcios
200 yes 205 1
http://johnturcios.com/portfolio/
THE GRIND – John Turcios
200 yes 164 0
https://johnturcios.com/blog/author/blacksheep82/
blacksheep82 – John Turcios
200 yes 223 0
https://johnturcios.com/wp-content/uploads/2021/09/John-Turcios-Resume.pdf 200 no 0 1

Audit your own site — free

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

Scan your site →