Catalog / justinbevans.com
81

SEO audit for justinbevans.com

Justin B. Evans | Web Designer, Developer, & Artist

other

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

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

Howdy! I am a web designer, web developer, and artist in the Washington D.C. area.

50
pages crawled
10
indexable pages
9
errors
24
warnings
122
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Security 81 9 1 19
Content 95 0 8 2
Canonical 98 0 4 9
Headings 98 0 4 1
Agent Readiness 98 0 3 11
Links 98 0 3 2
Meta Description 99 0 1 5
Crawlability 100 0 0 3
Images 100 0 0 11
Performance 100 0 0 37
Social 100 0 0 2
Structured Data 100 0 0 10
URL 100 0 0 10
Findings

Errors (1 rules)

error Mixed content on HTTPS page

Rule security.mixed_content · Security · 9 occurrence(s)

Warnings (8 rules)

warning Control has no accessible name

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

warning Missing canonical tag

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

warning Interior page canonicalizes to the homepage

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

  • http://www.justinbevans.com/contact — this interior page canonicalizes to the homepage (http://www.justinbevans.com/) — Google will treat the homepage as authoritative and drop this page from search. Point the canonical at the page's own URL.
  • http://www.justinbevans.com/portfolio — this interior page canonicalizes to the homepage (http://www.justinbevans.com/) — Google will treat the homepage as authoritative and drop this page from search. Point the canonical at the page's own URL.
  • http://www.justinbevans.com/web-design-development — this interior page canonicalizes to the homepage (http://www.justinbevans.com/) — Google will treat the homepage as authoritative and drop this page from search. Point the canonical at the page's own URL.

warning Content-Type header doesn't match the actual content

Rule headers.content_type_mismatch · Security · 1 occurrence(s)

warning Internal link points to a redirect

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

warning Missing meta description

Rule meta_desc.missing · Meta Description · 1 occurrence(s)

Notices (21 rules)

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 · 10 occurrence(s)

notice Canonical points to a different URL

Rule canonical.non_self · Canonical · 9 occurrence(s)

notice Low text-to-HTML ratio

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

notice Multiple <h1> elements

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

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

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

  • http://www.justinbevans.com/portfolio — 13 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.
  • https://www.justinbevans.com/portfolio — 13 image(s) use a generic/auto-generated filename (e.g. IMG_1234.jpg, photo1.png, a bare UUID). Google reads the filename as a signal of image content, so rename files descriptively (hyphen-separated words) before upload.

notice Likely hero image lacks fetchpriority=high

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

  • http://www.justinbevans.com/contact — the likely hero/LCP image (heart.gif) 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.
  • http://www.justinbevans.com/portfolio — the likely hero/LCP image (heart.gif) 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.
  • http://www.justinbevans.com/web-design-development — the likely hero/LCP image (heart.gif) 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://www.justinbevans.com/ — the likely hero/LCP image (heart.gif) 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://www.justinbevans.com/about — the likely hero/LCP image (heart.gif) 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://www.justinbevans.com/contact — the likely hero/LCP image (heart.gif) 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://www.justinbevans.com/contact.php — the likely hero/LCP image (heart.gif) 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://www.justinbevans.com/portfolio — the likely hero/LCP image (heart.gif) 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://www.justinbevans.com/web-design-development — the likely hero/LCP image (heart.gif) 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 · 9 occurrence(s)

notice Internal link has no anchor text / accessible name

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

  • http://www.justinbevans.com/portfolio — 81 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
  • https://www.justinbevans.com/portfolio — 81 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.

notice Meta description too short

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

notice Missing Open Graph tags

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

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

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

  • http://www.justinbevans.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.
  • http://www.justinbevans.com/portfolio — 85 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.
  • http://www.justinbevans.com/web-design-development — 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://www.justinbevans.com/ — 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://www.justinbevans.com/about — 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://www.justinbevans.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://www.justinbevans.com/contact.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://www.justinbevans.com/portfolio — 85 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://www.justinbevans.com/web-design-development — 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.

notice Large HTML document

Rule perf.large_html · Performance · 1 occurrence(s)

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

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

  • http://www.justinbevans.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.
  • http://www.justinbevans.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.
  • http://www.justinbevans.com/web-design-development — 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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.com/web-design-development — 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 · 9 occurrence(s)

  • http://www.justinbevans.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.
  • http://www.justinbevans.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.
  • http://www.justinbevans.com/web-design-development — 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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.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://www.justinbevans.com/web-design-development — 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 · 3 occurrence(s)

notice Missing recommended security headers

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

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

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

  • http://www.justinbevans.com/contact — 10 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • http://www.justinbevans.com/portfolio — 3 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • http://www.justinbevans.com/web-design-development — 13 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://www.justinbevans.com/ — 3 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://www.justinbevans.com/about — 3 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://www.justinbevans.com/contact — 10 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://www.justinbevans.com/contact.php — 10 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://www.justinbevans.com/portfolio — 3 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
  • https://www.justinbevans.com/web-design-development — 13 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".

notice Missing Twitter Card tag

Rule twitter.missing · Social · 1 occurrence(s)

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://www.justinbevans.com/
Justin B. Evans | Web Designer, Developer, & Artist
200 yes 97 9
https://www.justinbevans.com/about
About Justin B. Evans | Web Designer, Developer, & Artist
200 yes 146 9
https://www.justinbevans.com/contact
Contact Justin B. Evans
200 yes 109 9
https://www.justinbevans.com/portfolio
The Artwork of Justin B. Evans | Illustration, Pixel Art, Sprite Sculpture
200 yes 54 9
https://www.justinbevans.com/web-design-development
Web Design & Development | Justin B. Evans
200 yes 468 9
https://www.justinbevans.com/contact.php
Contact Justin B. Evans
200 yes 109 2
https://www.justinbevans.com/web/experiments/ios-navigation.html
iOS Multitasking Navigation | Web Design Experiment | Justin B. Evans
200 yes 80 2
http://www.justinbevans.com/contact
Contact Justin B. Evans
200 yes 109 1
http://www.justinbevans.com/portfolio
The Artwork of Justin B. Evans | Illustration, Pixel Art, Sprite Sculpture
200 yes 54 1
http://www.justinbevans.com/web-design-development
Web Design & Development | Justin B. Evans
200 yes 468 1
https://www.justinbevans.com/work/artwork/01-photo_theguy.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/01bwish.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/02-photo_moon.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/022weeker.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/03-photo_mountain.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/11-drawing_hear.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/12-photo_mythology.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/13-figurestudy07.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/17-figurestudy13.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/alstromeria.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/amazon.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/amiri-jump.gif 200 no 0 2
https://www.justinbevans.com/work/artwork/blackmage.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/bungee-stance.gif 200 no 0 2
https://www.justinbevans.com/work/artwork/conan.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/contact.gif 200 no 0 2
https://www.justinbevans.com/work/artwork/cyclone-idle.gif 200 no 0 2
https://www.justinbevans.com/work/artwork/frey.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/google-flower.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/hedieh-logo.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/homepage.gif 200 no 0 2
https://www.justinbevans.com/work/artwork/img_4583_0.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/img_4703.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/img_4704.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/img_5437.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/img_5446.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/logo-two-mushrooms.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/melissa-logo.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/more-pixels.gif 200 no 0 2
https://www.justinbevans.com/work/artwork/not-again.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/onoff.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/pacman.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/paperwhite.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/poinsettia.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/potatorange.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/super-princess-link.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/tsuyu.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/twig-leaf.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/vivification.jpg 200 no 0 2
https://www.justinbevans.com/work/artwork/yoda.gif 200 no 0 2

Audit your own site — free

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

Scan your site →