Catalog / jandhlabs.com
75

SEO audit for jandhlabs.com

Home | Jekyll + Hyde Labs

other

Health 75/100 (good) · 50 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)
Screenshot of jandhlabs.com
50
pages crawled
32
indexable pages
0
errors
202
warnings
371
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Performance 63 0 62 108
Canonical 81 0 32 0
Meta Description 81 0 32 0
Agent Readiness 81 0 31 57
Duplicate 81 0 31 0
Headings 95 0 9 0
Content 97 0 5 26
Images 100 0 0 31
Mobile 100 0 0 3
Robots 100 0 0 1
Security 100 0 0 36
Social 100 0 0 64
Structured Data 100 0 0 32
URL 100 0 0 13
Findings

Warnings (9 rules)

warning Control has no accessible name

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

warning Thin content (low word count)

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

warning Duplicate page content

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

warning Duplicate <title> across pages

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

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

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

  • https://jandhlabs.com/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/about — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/about.php — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/amazon-advertising — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/books.php — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/case-studies — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/case-study.php?slug=bob-evans — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/contact — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/contact.php — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/getting-into-retail — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/getting-into-retail.php — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/be-your-retail-buyers-hero — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/customer-email-list/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/never-ask-to-try/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/new-paradigm/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/save-delisted-product/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/share-of-voice/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/what-are-your-odds/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/insights/what-kind-of-entrepreneur/ — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/privacy — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/rules-for-retail — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/scaling-in-retail — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/scaling-in-retail.php — the likely hero/LCP image (wordmark_orange.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://jandhlabs.com/works — the likely hero/LCP image (wordmark_orange.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.

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

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

Notices (20 rules)

notice Heading levels skip a level

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

notice No llms.txt for AI agents

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

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

notice No main landmark for AI agents

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

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

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

  • https://jandhlabs.com/amazon-advertising — this page reads as very difficult (Flesch Reading Ease 24, 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://jandhlabs.com/case-studies — this page reads as difficult (Flesch Reading Ease 45, 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://jandhlabs.com/case-study.php?slug=bob-evans — this page reads as very difficult (Flesch Reading Ease 15, 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://jandhlabs.com/getting-into-retail — this page reads as difficult (Flesch Reading Ease 45, 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://jandhlabs.com/getting-into-retail.php — this page reads as difficult (Flesch Reading Ease 45, 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://jandhlabs.com/insights — this page reads as difficult (Flesch Reading Ease 46, 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://jandhlabs.com/scaling-in-retail — this page reads as difficult (Flesch Reading Ease 30, 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://jandhlabs.com/scaling-in-retail.php — this page reads as difficult (Flesch Reading Ease 30, 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://jandhlabs.com/works — this page reads as difficult (Flesch Reading Ease 31, 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 Missing <!DOCTYPE html> (quirks-mode rendering risk)

Rule encoding.doctype_missing · Content · 17 occurrence(s)

notice Missing html lang attribute

Rule i18n.lang_missing · Mobile · 3 occurrence(s)

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

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

notice Missing Open Graph tags

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

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

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

  • https://jandhlabs.com/ — 18 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://jandhlabs.com/about — 4 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://jandhlabs.com/about.php — 4 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://jandhlabs.com/amazon-advertising — 2 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://jandhlabs.com/books.php — 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://jandhlabs.com/case-studies — 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://jandhlabs.com/case-study.php?slug=bob-evans — 7 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://jandhlabs.com/contact — 2 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://jandhlabs.com/contact.php — 2 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://jandhlabs.com/getting-into-retail — 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://jandhlabs.com/getting-into-retail.php — 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://jandhlabs.com/insights — 33 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://jandhlabs.com/insights/be-your-retail-buyers-hero — 2 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://jandhlabs.com/insights/customer-email-list/ — 2 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://jandhlabs.com/insights/never-ask-to-try/ — 7 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://jandhlabs.com/insights/new-paradigm/ — 2 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://jandhlabs.com/insights/save-delisted-product/ — 2 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://jandhlabs.com/insights/share-of-voice/ — 7 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://jandhlabs.com/insights/what-are-your-odds/ — 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://jandhlabs.com/insights/what-kind-of-entrepreneur/ — 2 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://jandhlabs.com/privacy — 2 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://jandhlabs.com/rules-for-retail — 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://jandhlabs.com/scaling-in-retail — 21 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://jandhlabs.com/scaling-in-retail.php — 21 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://jandhlabs.com/works — 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.

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

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

  • https://jandhlabs.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://jandhlabs.com/about — 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://jandhlabs.com/about.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://jandhlabs.com/amazon-advertising — 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://jandhlabs.com/books.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://jandhlabs.com/case-studies — 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://jandhlabs.com/case-study.php?slug=bob-evans — 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://jandhlabs.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://jandhlabs.com/contact.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://jandhlabs.com/getting-into-retail — 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://jandhlabs.com/getting-into-retail.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://jandhlabs.com/insights — 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://jandhlabs.com/insights/be-your-retail-buyers-hero — 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://jandhlabs.com/insights/never-ask-to-try/ — 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://jandhlabs.com/insights/new-paradigm/ — 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://jandhlabs.com/insights/save-delisted-product/ — 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://jandhlabs.com/insights/share-of-voice/ — 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://jandhlabs.com/insights/what-are-your-odds/ — 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://jandhlabs.com/insights/what-kind-of-entrepreneur/ — 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://jandhlabs.com/ipsum — 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://jandhlabs.com/privacy — 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://jandhlabs.com/rules-for-retail — 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://jandhlabs.com/scaling-in-retail — 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://jandhlabs.com/scaling-in-retail.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://jandhlabs.com/works — 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 · 32 occurrence(s)

  • https://jandhlabs.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://jandhlabs.com/about — 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://jandhlabs.com/about.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://jandhlabs.com/amazon-advertising — 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://jandhlabs.com/books.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://jandhlabs.com/case-studies — 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://jandhlabs.com/case-study.php?slug=bob-evans — 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://jandhlabs.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://jandhlabs.com/contact.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://jandhlabs.com/getting-into-retail — 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://jandhlabs.com/getting-into-retail.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://jandhlabs.com/insights — 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://jandhlabs.com/insights/be-your-retail-buyers-hero — 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://jandhlabs.com/insights/never-ask-to-try/ — 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://jandhlabs.com/insights/new-paradigm/ — 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://jandhlabs.com/insights/save-delisted-product/ — 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://jandhlabs.com/insights/share-of-voice/ — 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://jandhlabs.com/insights/what-are-your-odds/ — 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://jandhlabs.com/insights/what-kind-of-entrepreneur/ — 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://jandhlabs.com/ipsum — 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://jandhlabs.com/privacy — 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://jandhlabs.com/rules-for-retail — 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://jandhlabs.com/scaling-in-retail — 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://jandhlabs.com/scaling-in-retail.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://jandhlabs.com/works — 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 Slow server response

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

notice robots.txt missing (root returns 404/none)

Rule robots.txt_missing · Robots · 1 occurrence(s)

  • https://jandhlabs.com/ — robots.txt did not return a 200 at the site root — a healthy site should serve one (declare your sitemap and confirm the host serves root files)

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

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

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://jandhlabs.com/
Home | Jekyll + Hyde Labs
200 yes 354 32
https://jandhlabs.com/about
About Us | Jekyll + Hyde Labs
200 yes 621 31
https://jandhlabs.com/amazon-advertising
Amazon Advertising Services | Jekyll + Hyde Labs
200 yes 556 31
https://jandhlabs.com/books.php
Books | Jekyll + Hyde Labs
200 yes 285 31
https://jandhlabs.com/case-studies
Case Studies | Jekyll + Hyde Labs
200 yes 149 31
https://jandhlabs.com/contact
Contact Us | Jekyll + Hyde Labs
200 yes 155 31
https://jandhlabs.com/getting-into-retail
Getting Into Retail | Jekyll + Hyde Labs
200 yes 1609 31
https://jandhlabs.com/insights
Insights | Jekyll + Hyde Labs
200 yes 592 31
https://jandhlabs.com/ipsum
Jekyll+Ipsum | Jekyll + Hyde Labs
200 yes 46 31
https://jandhlabs.com/privacy
Privacy Policy | Jekyll + Hyde Labs
200 yes 737 31
https://jandhlabs.com/rules-for-retail
27 Rules for Retail | Jekyll + Hyde Labs
200 yes 4699 31
https://jandhlabs.com/scaling-in-retail
Scaling in Retail | Jekyll + Hyde Labs
200 yes 1512 31
https://jandhlabs.com/works
Our Work | Jekyll + Hyde Labs
200 yes 153 31
https://jandhlabs.com/insights/what-are-your-odds/
Insights | Jekyll + Hyde Labs
200 yes 661 3
https://jandhlabs.com/insights/be-your-retail-buyers-hero/
Insights | Jekyll + Hyde Labs
200 yes 672 3
https://jandhlabs.com/insights/save-delisted-product/
Insights | Jekyll + Hyde Labs
200 yes 1183 3
https://jandhlabs.com/about.php
About Us | Jekyll + Hyde Labs
200 yes 621 1
https://jandhlabs.com/getting-into-retail.php
Getting Into Retail | Jekyll + Hyde Labs
200 yes 1609 1
https://jandhlabs.com/scaling-in-retail.php
Scaling in Retail | Jekyll + Hyde Labs
200 yes 1512 1
https://jandhlabs.com/contact.php
Contact Us | Jekyll + Hyde Labs
200 yes 155 2
https://jandhlabs.com/case-study.php?slug=bob-evans
Bob Evans Farms | Jekyll + Hyde Labs
200 yes 627 1
https://jandhlabs.com/insights/7-deadly-mistakes/
Insights | Jekyll + Hyde Labs
200 yes 1802 1
https://jandhlabs.com/insights/cpg-unbranded/
Insights | Jekyll + Hyde Labs
200 yes 1224 1
https://jandhlabs.com/insights/customer-email-list/
Insights | Jekyll + Hyde Labs
200 yes 620 1
https://jandhlabs.com/insights/let-go-to-grow/
Insights | Jekyll + Hyde Labs
200 yes 717 1
https://jandhlabs.com/insights/myth-we-build-brands/
Insights | Jekyll + Hyde Labs
200 yes 1148 1
https://jandhlabs.com/insights/never-ask-to-try/
Insights | Jekyll + Hyde Labs
200 yes 893 1
https://jandhlabs.com/insights/new-paradigm/
Insights | Jekyll + Hyde Labs
200 yes 673 1
https://jandhlabs.com/insights/share-of-voice/
Insights | Jekyll + Hyde Labs
200 yes 885 1
https://jandhlabs.com/insights/the-one-thing/
Insights | Jekyll + Hyde Labs
200 yes 665 1
https://jandhlabs.com/insights/what-kind-of-entrepreneur/
Insights | Jekyll + Hyde Labs
200 yes 770 1
https://jandhlabs.com/insights/be-your-retail-buyers-hero
Insights | Jekyll + Hyde Labs
200 yes 672 0
https://jandhlabs.com/pdf/First_Retailer_Surival_Guide.pdf 200 no 0 3
https://jandhlabs.com/pdf/Grape-Dime-Beach-Ball.pdf 200 no 0 1
https://jandhlabs.com/pdf/HorseForSale_v01.pdf 200 no 0 1
https://jandhlabs.com/pdf/How_We_Experience_Time.pdf 200 no 0 1
https://jandhlabs.com/pdf/Managing_Reviews.pdf 200 no 0 1
https://jandhlabs.com/pdf/MasteringPricingStrategies.pdf 200 no 0 3
https://jandhlabs.com/pdf/aiforcreative.pdf 200 no 0 1
https://jandhlabs.com/pdf/amazonfriendorfoe.pdf 200 no 0 1
https://jandhlabs.com/pdf/digital-tests.pdf 200 no 0 1
https://jandhlabs.com/pdf/erp_wake_up.pdf 200 no 0 1
https://jandhlabs.com/pdf/huntersthrive.pdf 200 no 0 3
https://jandhlabs.com/pdf/lastyearsbudget.pdf 200 no 0 1
https://jandhlabs.com/pdf/massretail.pdf 200 no 0 3
https://jandhlabs.com/pdf/partnership.pdf 200 no 0 3
https://jandhlabs.com/pdf/private_label.pdf 200 no 0 1
https://jandhlabs.com/pdf/retail.pdf 200 no 0 3
https://jandhlabs.com/pdf/sandboxwp_v7.pdf 200 no 0 3
https://jandhlabs.com/pdf/targetmarket.pdf 200 no 0 1

Audit your own site — free

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

Scan your site →