Catalog / duncansolutions.com
58

SEO audit for duncansolutions.com

Duncan Solutions

corporate

Health 58/100 (fair) · 17 pages crawled · generated 2026-08-26

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

Duncan Solutions offers full-service parking solutions and end-to-end tolling solutions to improve our clients' revenue and mobility on our roads and in our communities.

Screenshot of duncansolutions.com
17
pages crawled
16
indexable pages
2
errors
71
warnings
131
notices
6
orphan pages
1
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Links 84 1 6 0
Crawlability 94 1 0 0
Performance 58 0 24 17
Duplicate 65 0 20 15
Security 72 0 16 19
Content 93 0 4 13
Indexability 98 0 1 0
Agent Readiness 100 0 0 1
Images 100 0 0 21
Meta Description 100 0 0 14
Robots 100 0 0 1
Social 100 0 0 14
Structured Data 100 0 0 16
Findings

Errors (2 rules)

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

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

error Client error (4xx) response

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

Warnings (8 rules)

warning Thin content (low word count)

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

warning Duplicate page content

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

warning Duplicate <title> across pages

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

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

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

  • https://www.duncansolutions.com/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/about/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/book-a-demo — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/book-a-demo/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/careers — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/careers/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/contact-us — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/contact-us/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/mobihub — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/mobihub/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/parking — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/parking/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/privacy — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/privacy/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/terms — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".
  • https://www.duncansolutions.com/tolling/ — the Content-Type is "text/html" with no charset — the HTTP charset is authoritative and browsers otherwise guess the encoding, which can garble non-ASCII text (mojibake). Declare it explicitly: "text/html; charset=utf-8".

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

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

  • https://www.duncansolutions.com/about/ — the likely hero/LCP image (about-section-mobility.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://www.duncansolutions.com/careers — the likely hero/LCP image (careers-greatplace.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://www.duncansolutions.com/careers/ — the likely hero/LCP image (careers-greatplace.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://www.duncansolutions.com/mobihub — the likely hero/LCP image (mobihub-section-connected.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://www.duncansolutions.com/mobihub/ — the likely hero/LCP image (mobihub-section-connected.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://www.duncansolutions.com/parking — the likely hero/LCP image (parking-intro.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://www.duncansolutions.com/parking/ — the likely hero/LCP image (parking-intro.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://www.duncansolutions.com/tolling/ — the likely hero/LCP image (tolling-intro.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 Page is noindex

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

warning Orphan page (no internal inlinks)

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

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

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

Notices (15 rules)

notice No llms.txt for AI agents

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

notice Low text-to-HTML ratio

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

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

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

  • https://www.duncansolutions.com/ — this page reads as difficult (Flesch Reading Ease 33, 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://www.duncansolutions.com/about/ — 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://www.duncansolutions.com/careers — this page reads as difficult (Flesch Reading Ease 38, 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://www.duncansolutions.com/careers/ — this page reads as difficult (Flesch Reading Ease 38, 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://www.duncansolutions.com/mobihub — this page reads as very difficult (Flesch Reading Ease 19, 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://www.duncansolutions.com/mobihub/ — this page reads as very difficult (Flesch Reading Ease 19, 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://www.duncansolutions.com/parking — this page reads as very difficult (Flesch Reading Ease 17, 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://www.duncansolutions.com/parking/ — this page reads as very difficult (Flesch Reading Ease 17, 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://www.duncansolutions.com/tolling/ — this page reads as very difficult (Flesch Reading Ease 5, 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 Duplicate meta description across pages

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

notice Image alt text is keyword-stuffed (repetition / low variety)

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

  • https://www.duncansolutions.com/ — 1 image(s) have keyword-stuffed alt text — the same word repeated several times, or a long low-variety keyword list. Google's image guidance asks for short, descriptive alt text, not keyword lists; rewrite it to describe the image.

notice Image alt text is very long (possible keyword stuffing)

Rule images.alt_too_long · Images · 4 occurrence(s)

notice Likely hero image lacks fetchpriority=high

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

  • https://www.duncansolutions.com/ — the likely hero/LCP image (home-hero.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 · 16 occurrence(s)

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

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

  • https://www.duncansolutions.com/ — 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://www.duncansolutions.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://www.duncansolutions.com/book-a-demo — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/book-a-demo/ — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/careers — 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.duncansolutions.com/careers/ — 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.duncansolutions.com/contact-us — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/contact-us/ — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/mobihub — 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://www.duncansolutions.com/mobihub/ — 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://www.duncansolutions.com/parking — 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.duncansolutions.com/parking/ — 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.duncansolutions.com/privacy — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/privacy/ — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/terms — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.
  • https://www.duncansolutions.com/tolling/ — 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.

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

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

  • https://www.duncansolutions.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 · 2 occurrence(s)

  • https://www.duncansolutions.com/privacy — 2 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.duncansolutions.com/privacy/ — 2 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
Pages (showing 17 of 17)
URLStatusIndexableWordsIn-links
https://www.duncansolutions.com/
Duncan Solutions
200 yes 445 17
https://www.duncansolutions.com/about/
About | Duncan Solutions
200 yes 494 17
https://www.duncansolutions.com/book-a-demo
Book a Demo | Duncan Solutions
200 yes 110 17
https://www.duncansolutions.com/careers
Careers | Duncan Solutions
200 yes 469 17
https://www.duncansolutions.com/contact-us
Contact | Duncan Solutions
200 yes 110 17
https://www.duncansolutions.com/mobihub
MöbiHUB℠ | Duncan Solutions
200 yes 678 17
https://www.duncansolutions.com/parking
Parking | Duncan Solutions
200 yes 500 17
https://www.duncansolutions.com/privacy/
Privacy | Duncan Solutions
200 yes 774 17
https://www.duncansolutions.com/terms
Terms of Use | Duncan Solutions
200 yes 3672 17
https://www.duncansolutions.com/tolling/
Tolling | Duncan Solutions
200 yes 668 17
https://www.duncansolutions.com/book-a-demo/
Book a Demo | Duncan Solutions
200 yes 110 0
https://www.duncansolutions.com/careers/
Careers | Duncan Solutions
200 yes 469 0
https://www.duncansolutions.com/contact-us/
Contact | Duncan Solutions
200 yes 110 0
https://www.duncansolutions.com/mobihub/
MöbiHUB℠ | Duncan Solutions
200 yes 678 0
https://www.duncansolutions.com/parking/
Parking | Duncan Solutions
200 yes 500 0
https://www.duncansolutions.com/privacy
Privacy | Duncan Solutions
200 yes 774 0
https://www.duncansolutions.com/contact
404: This page could not be found.
404 no 26 1

Audit your own site — free

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

Scan your site →