KM Digital — Full Audit Report

What We Found
Doing Your
SEO Audit

Findings from a full Ahrefs audit, Google Search Console crawl stats, Screaming Frog crawl, and GSC Coverage analysis — all run today. Every issue below has specific data behind it and a clear fix.

March 23, 2026
Prepared by KM Digital
Audit Score41 / 100Critical
GSC 404 Rate
13.8%
~3,224 dead-URL crawl requests
Local Kw. on Page 1
0
Zero client-intent queries ranking
Info. Traffic
80%
Of top keywords — no conversion intent
Domain Rating
DR 12
vs. Justia DR 90, Cornell DR 92
Pages Crawled
1,219
124 location/service pages live
Prioritized Findings
8 Issues, Ranked by Impact

Every issue below is backed by real data from today's audit. They're ordered by the damage each one is causing right now — fix them in this sequence for maximum impact. The good news: many of these have fast, specific fixes.

1
Critical
239 Pages Returning 404 — Google Is Wasting 13.8% of Every Crawl on Dead URLs
Impact if Fixed
More pages indexed faster. Discovery ratio improves immediately.
What it is
When Google crawls the site, 1 in 7 requests hits a page that no longer exists. Google has a limited crawl budget per site — the time it spends confirming dead pages is time it's not spending discovering and indexing your live service pages. The 404 count was 50 in December and has grown to 239 — it's still climbing.
The data
GSC Crawl Stats shows 13.78% of all crawl requests returning 404. The critical threshold is 3% — this site is running at 4.6× that level. The GSC Coverage export shows 239 specific dead URLs. 196 of them have a straightforward fix — two regex rules cover 109 URLs alone.
239
404 URLs in GSC → see fix section below
Impact if fixed
Once Google stops hitting 239 dead URLs every crawl cycle, that budget redirects to your live pages. Expect the discovery ratio (currently 11.4%) to climb above 16% within 30–45 days, meaning Google starts finding and indexing new content faster. New service pages you build will rank quicker. This is the single highest-leverage fix available.
🔧
Fix: Two regex redirect rules handle 109 URLs instantly. ~80 individual redirects cover the rest. Full guide with every URL mapped is in Part 2 of this document.
2
Critical
Zero Local Service Keywords on Page 1 — Google Sees You as a Legal Blog, Not a Law Firm
Impact if Fixed
Queries from people ready to hire a lawyer start appearing.
What it is
The site ranks for informational queries — people researching law — but not for the commercial queries people type when they're ready to hire an attorney. "DUI lawyer Warrenton VA," "divorce attorney Warrenton," "criminal defense attorney Fauquier County" — none of these appear in the site's top keywords. Ahrefs' competitor list shows no other Warrenton law firms, which means the site isn't even registering at the local level.
The data
Of the top 25 organic keywords by traffic: 20 are purely informational (people studying law, not hiring lawyers). The #1 keyword — "new law for grandparents' rights" — drives 556 sessions/month to a blog post with no way to contact the firm. Ahrefs shows organic competitors as Cornell (DR 92), Justia (DR 90), and Fidelity.com — not a single local law firm.
$0
Revenue-generating keywords on page 1
Impact if fixed
Ranking for even 3–5 Warrenton/Richmond service terms means the site starts appearing when people are actively looking for a lawyer. Keywords like "DUI lawyer Warrenton VA" (CPC: $160–200) indicate the searcher is ready to pay. Each page-1 ranking for a commercial local keyword is a direct new-client pipeline that runs 24/7.
🔧
Fix: The existing 124 service pages are the foundation — they need GBP optimization, schema markup, and internal link authority reinforcement. New pages for high-value gaps (reckless driving, DUI) accelerate the timeline. Phase 2–3 of the plan addresses this directly.
3
Critical
556 Sessions/Month Going to a Blog Post With No Way to Contact the Firm
Impact if Fixed
Existing traffic starts generating leads without new rankings.
What it is
The site's #1 keyword — "new law for grandparents' rights" — is sending 556 people per month to a blog post that has no call-to-action, no internal link to the family law service page, and no phone number in context. These are people who just read about a family legal issue on your site and left without any path to become a client. The same problem exists across most high-traffic blog posts.
The data
The grandparents' rights post ranks #1 for a 1,500-volume keyword with a CPC of $59 — meaning lawyers pay $59 per click for that audience. The site gets it for free, then lets them leave. Across the top 5 blog posts, Ahrefs estimates roughly 700+ sessions/month hitting content with no conversion path.
700+
Monthly sessions — no CTA, no path to contact
Impact if fixed
Adding a single contextual CTA ("Need help with a family law matter? Call Ashwell & Ashwell.") and an internal link to the family law service page is a 1-hour fix that immediately puts 556 monthly visitors into a conversion funnel. No new rankings required. This is the fastest possible path from the current traffic to new client inquiries.
🔧
Fix: Add in-body CTAs and internal links to the top 5 blog posts by traffic. Takes 1–2 hours total. Can be done this week.
4
High
Discovery Ratio at 11.4% — Google Isn't Finding New Content
Impact if Fixed
New pages rank faster. Less lag between publishing and appearing in search.
What it is
Google has two reasons to crawl a page: to check if an existing page has changed (refresh) or to find new content (discovery). Only 11.4% of crawl requests are discovery — meaning Google is spending 88.6% of its time on pages it already knows about. The 404 waste is a major cause: every crawl request hitting a dead URL is a discovery request stolen.
The data
GSC Crawl Stats: Purpose table shows 88.63% refresh / 11.37% discovery. The healthy target is 20%+. The jump from 50 to 239 active 404s over the past 90 days has progressively strangled discovery bandwidth as more crawl budget gets consumed by dead pages.
11.4%
Discovery ratio — should be 20%+
Impact if fixed
Fixing the 404 rate (Issue #1) directly improves discovery ratio — they're linked. A cleaner crawl budget means new service pages you build in Phase 2 get indexed in days, not weeks. A clean sitemap submission after the 301 redirects are deployed is the secondary lever.
🔧
Fix: Flows directly from fixing Issue #1. After 301 redirects deploy, resubmit the cleaned XML sitemap in GSC. Discovery ratio should climb above 16% within 30–45 days.
5
High
Richmond Service Pages Loading in 1.4–2.0 Seconds — Server Spikes Hitting 580ms Avg
Impact if Fixed
Better crawl rate for Richmond. Faster user experience = more conversions.
What it is
9 service pages are loading slower than 500ms, with the Richmond DUI Lawyer page taking 2.02 seconds and Richmond Civil Business page at 1.81 seconds. Separately, GSC crawl stats show recurring spikes in average response time — peaking at 580ms on March 9, with 6 days exceeding 350ms over the past 90 days. The pattern is concentrated on Richmond and Culpeper pages, suggesting a template or plugin issue specific to those sections.
The data
Screaming Frog crawl: 27 pages return response times over 500ms, including 9 service pages. GSC baseline avg response time was 215ms in December — it's now averaging 252ms (+17.5%). The Jan 23 site event may have introduced a plugin or template change that is specifically affecting the Richmond/Culpeper section.
2.02s
Richmond DUI Lawyer page response time
Impact if fixed
Page speed is a confirmed Google ranking factor. Slower pages are crawled less frequently and rank lower than faster equivalents. Getting Richmond pages under 500ms directly improves their ranking potential — especially important as the Phase 2 migration gives those pages new location-structured URLs. Faster pages also reduce bounce rate from mobile visitors.
🔧
Fix: Run PageSpeed Insights on the 4 slowest pages. Compare Richmond vs. Warrenton page templates to isolate the difference. Enable server-side caching and WebP image optimization if not active.
6
Medium
94 Title Tags Are Too Long — 31 High-Traffic Service Pages Getting Truncated in Google Search Results
Impact if Fixed
Better SERP appearance → higher click-through rate on existing rankings.
What it is
Google truncates title tags at ~60 characters in search results. When a title gets cut off, users see an incomplete message — which reduces their likelihood of clicking. 31 of your most important service pages (the ones that already rank and get the most internal links) have title tags that exceed this limit, meaning every current search result appearance is showing a truncated title.
The data
Screaming Frog: 94 HTML pages with title tags over 60 characters, including the homepage (65 chars), /warrenton-criminal-defense-lawyer/ hub, /richmond-criminal/, and /warrenton-family-lawyer/. Most are 61–67 chars — just 1–7 characters over the limit. The fix is trimming, not rewriting.
94
Pages with truncated title tags
Impact if fixed
Higher click-through rate on existing rankings — no new rankings needed. Industry studies show title tag optimization improves CTR 5–15% on average. Applied across 94 pages, even a modest CTR improvement compounds into meaningfully more organic sessions per month from the rankings already held.
🔧
Fix: Trim titles to 52–58 characters, keyword-first. Most need just the " | Ashwell & Ashwell" suffix removed or shortened. Start with the 31 service pages (higher traffic impact), then tackle 63 blog posts in Month 2.
7
Medium
15 Elementor-Generated Parameter URLs Are Being Crawled — Wasting Budget on Duplicate Content
Impact if Fixed
15 crawl-waste URLs suppressed. Crawl budget goes to real pages instead.
What it is
The Elementor page builder is generating duplicate versions of blog pagination pages with a ?et_blog parameter appended — e.g., /blog/?et_blog, /blog/page/3/?et_blog. These are internally linked (meaning the site is actively sending Googlebot to them) and while they have correct canonical tags, Google is still following and crawling them, burning crawl budget on content it already has.
The data
Screaming Frog found 15 ?et_blog URLs with 10–17 internal inlinks each. All are canonicalized to their clean equivalents, so no indexing damage — but they're still being crawled. Separately, the GSC Coverage export shows these same URLs appearing as 404s in the old practice area structure (/criminal-defense/drug-crimes/marijuana-and-virginia-law/?et_blog), meaning they're compounding both issues.
15
Duplicate parameter URLs crawled internally
Impact if fixed
This is literally a 10-minute fix: one line in robots.txt plus one GSC URL parameter setting. The result: Google stops crawling these 15 URLs on every cycle, and that crawl budget goes to actual content pages instead. Small absolute gain, but it's one of the easiest wins in this entire list.
🔧
Fix: Add Disallow: /*?et_blog to robots.txt. In GSC → Settings → Crawling → URL Parameters, mark "et_blog" as "doesn't affect content." Done.
8
Quick Win
"Reckless Driving Virginia" Is Ranking #11 — One Service Page Could Make It Top 5
Impact if Fixed
150–300 qualified monthly sessions from a high-intent, high-CPC keyword.
What it is
"Reckless driving virginia" is a 1,500-volume/month keyword with a CPC of $139 — meaning lawyers are paying $139 per click because the people searching for it are about to hire an attorney. The site currently ranks #11 for this keyword via a blog post — not a service page. A properly structured service page with attorney credentials, case outcomes, FAQ schema, and a local CTA typically outranks a blog post by 4–8 positions on this type of query.
The data
Ahrefs: keyword ranks #11, CPC $139, volume 1,500/mo, keyword difficulty 4 (very achievable). A similar keyword — "contested divorce virginia" — is already ranking #4 via a proper service page, proving the site can rank service pages for these terms. The infrastructure is there; just not a service page for reckless driving specifically.
$139
CPC — people are paying this because they're hiring
Impact if fixed
Moving from #11 to top 5 on a 1,500-volume keyword typically increases monthly clicks from ~10 to 150–300 per month. At a conservative 5% consultation booking rate, that's 7–15 new qualified consultation inquiries per month from a single page. This is the highest near-term ROI keyword opportunity in the entire profile.
🔧
Fix: Build a dedicated /warrenton-reckless-driving-lawyer/ service page with attorney credentials, case outcomes, FAQPage schema, and strong CTA. Internal link from the existing blog post. Target: top 5 within 60 days of launch.
Part 2 of 2
The 404 Fix Guide — Every URL, Every Redirect
239
Root Cause + Complete Fix
What Caused the 404s & How to Fix All of Them

The GSC Coverage export shows 239 URLs returning 404. The site went through two major migrations without redirect maps. Below is the complete categorized fix — starting with two regex rules that handle 109 URLs in seconds, followed by individual redirect tables for the rest.

📋
Root Cause: Two URL Migrations With No Redirects
Migration 1 (pre-December 2025): The site moved from a generic practice area structure (/criminal-defense/, /family-law/, /civil-litigation/) to location-prefixed pages (/warrenton-criminal-defense-lawyer/). No 301 redirects were added. Google had already indexed the old URLs, so it kept crawling them and found 404s — creating the 50-URL baseline in the December data.

Migration 2 (January 23, 2026): Blog posts moved from date-based URLs (/blog/2023/09/slander-in-virginia/) to clean slugs (/blog/slander-in-virginia/). Again, no redirects. On January 23 alone, the 404 count jumped by 55 in a single day. It's been climbing ever since as Google continues re-crawling old indexed blog URLs.
Good news: 109 of 239 URLs (46%) are fixed by exactly two regex rules. You can deploy these in under 10 minutes. The remaining ~130 are individual redirects that can be imported via CSV in a single batch.
A
Do First · 2 Rules · 109 URLs
Regex Redirect: Old Date-Based Blog URLs + Double-Slash Variants
96 + 13 URLs
All 96 old blog URLs follow the same pattern: /blog/YYYY/MM/slug//blog/slug/. One regex rule handles all of them. A second regex handles 13 double-slash variants (/blog//YYYY/MM/slug/). These two rules resolve 109 of your 239 404s instantly.
Option A — .htaccess (add ABOVE the WordPress block)
# Rule 1: /blog/2023/09/slug/ → /blog/slug/  (handles 96 URLs)
RewriteRule ^blog/[0-9]{4}/[0-9]{2}/(.+)$ /blog/$1 [R=301,L]

# Rule 2: /blog//2023/09/slug/ → /blog/slug/  (handles 13 URLs)
RewriteRule ^blog//[0-9]{4}/[0-9]{2}/(.+)$ /blog/$1 [R=301,L]
Option B — Redirection Plugin (WordPress Admin → Redirection → Add New)
Rule 1
  Source (regex ON): /blog/[0-9]{4}/[0-9]{2}/(.+)
  Target:            /blog/$1
  Type:              301 Permanent

Rule 2
  Source (regex ON): /blog//[0-9]{4}/[0-9]{2}/(.+)
  Target:            /blog/$1
  Type:              301 Permanent
Verify first: After adding, visit /blog/2023/09/slander-in-virginia/ in your browser. It should land on /blog/slander-in-virginia/. If it hits a 404 at the new URL, the slug doesn't match — investigate that individual URL.
B
Critical · Individual Redirects
Old Practice Area Structure → Current Warrenton Pages
49 URLs
The old site used generic practice area URLs. Every one needs an individual redirect to its current location-prefixed equivalent.
Old URL (→ 404)Redirect To (301)
/criminal-defense//warrenton-criminal-defense-lawyer/
/criminal-defense/aggravated-assault//warrenton-criminal-defense-lawyer/assault-and-battery/aggravated/
/criminal-defense/aggrivated-assault//warrenton-criminal-defense-lawyer/assault-and-battery/aggravated/
/criminal-defense/drug-crimes/marijuana-and-virginia-law//warrenton-criminal-defense-lawyer/drug/marijuana/
/criminal-defense/federal-crimes-lawyer//warrenton-criminal-defense-lawyer/federal/
/criminal-defense/homicide//warrenton-criminal-defense-lawyer/homicide/
/criminal-defense/kidnapping//warrenton-criminal-defense-lawyer/kidnapping/
/criminal-defense/kidnapping/warrenton-criminal-defense-lawyer/kidnapping/
/criminal-defense/manslaughter//warrenton-criminal-defense-lawyer/homicide/manslaughter/
/criminal-defense/marijuana-and-virginia-law//warrenton-criminal-defense-lawyer/drug/marijuana/
/criminal-defense/sex-crimes//warrenton-criminal-defense-lawyer/sex-crimes/
/criminal-defense/traffic-tickets//warrenton-criminal-defense-lawyer/traffic/
/criminal-defense/white-collar-defense//warrenton-criminal-defense-lawyer/white-collar/
/family-law//warrenton-family-lawyer/
/family-law/alimony//warrenton-family-lawyer/alimony/
/family-law/child-custody-and-relocation//warrenton-family-lawyer/child-custody-and-relocation/
/family-law/child-support//warrenton-family-lawyer/child-support/
/family-law/divorce/contested-divorce-in-va//warrenton-family-lawyer/divorce/contested/
/family-law/divorce/uncontested-divorce-in-va//warrenton-family-lawyer/divorce/uncontested/
/family-law/prenuptial-agreement-virginia//warrenton-family-lawyer/prenuptial-agreement/
/civil-litigation//warrenton-civil-litigation-lawyer/
/civil-litigation/breach-of-contract-lawyers//warrenton-civil-litigation-lawyer/breach-of-contract/
/civil-litigation/business-and-contract-disputes//warrenton-civil-litigation-lawyer/business-and-contract-dispute/
/civil-litigation/construction-litigation//warrenton-civil-litigation-lawyer/construction-litigation/
/civil-litigation/land-and-boundary-disputes//warrenton-civil-litigation-lawyer/land-and-boundary-disputes/
/civil-litigation/partition-lawyers//warrenton-civil-litigation-lawyer/partition/
/civil-litigation/warrenton-civil-litigation-lawyer/
/real-estate//warrenton-real-estate-lawyer/
/real-estate/land-lord-tenant//warrenton-real-estate-lawyer/landlord-rights/
/real-estate/land-use-and-zoning//warrenton-real-estate-lawyer/land-use-and-zoning/
/real-estate/lawsuit-settlements//warrenton-real-estate-lawyer/settling-lawsuits/
/estate-planning//warrenton-estate-planning-lawyer/
/estate-planning/medical-directives//warrenton-estate-planning-lawyer/medical-directive/
/estate-planning/power-of-attorney//warrenton-estate-planning-lawyer/power-of-attorney/
/estate-planning/trusts//warrenton-estate-planning-lawyer/trusts/
/estate-planning/wills//warrenton-estate-planning-lawyer/wills/
/business-and-commercial-law//warrenton-business-commercial-lawyer/
/business-and-commercial-law/business-tort//warrenton-business-commercial-lawyer/business-tort/
/business-and-commercial-law/corporate-law//warrenton-business-commercial-lawyer/corporate/
/mediation/ and /mediation/warrenton-mediation-lawyer/
/appeals/ and /appeals/warrenton-appeals-lawyer/
/appeals/civil-appeals//warrenton-appeals-lawyer/civil/
/appeals/criminal-appeals//warrenton-appeals-lawyer/criminal/
/personal-injury/ and /personal-injury-and-wrongful-death//warrenton-personal-injury-lawyer/
/personal-injury/wrongful-death//warrenton-personal-injury-lawyer/
/divorce-and-family-law//warrenton-family-lawyer/
/services/civil-litigation//warrenton-civil-litigation-lawyer/
/services/business-and-commercial-law/warrenton-business-commercial-lawyer/
C
High · Individual Redirects
Old Root-Level Posts, Service Pages + Old Attorney Profile URLs
38 URLs
Old blog posts that were previously at the root level (now at /blog/), renamed service pages, and attorney profiles that moved from /attorney/ to /about-us/.
Old URLRedirect To
/real-estate-lawyers-in-warrenton-va//warrenton-real-estate-lawyer/
/culpepper-criminal/warrenton-criminal-defense-lawyer/
/warrenton-law-office//about-us/
/speeding-tickets//warrenton-criminal-defense-lawyer/traffic/speeding-ticket/
/driving-under-the-influence-in-virginia//warrenton-criminal-defense-lawyer/dui/
/criminal-appeals//warrenton-appeals-lawyer/criminal/
/appeals-appellate-advocacy//warrenton-appeals-lawyer/
/reckless-driving-virginia//warrenton-criminal-defense-lawyer/traffic/
/our-community//about-us/
/marijuana-and-virginia-law//warrenton-criminal-defense-lawyer/drug/marijuana/
/contested-divorce-in-va//warrenton-family-lawyer/divorce/contested/
/prenuptial-agreement-virginia//warrenton-family-lawyer/prenuptial-agreement/
/child-custody-and-relocation/warrenton-family-lawyer/child-custody-and-relocation/
/ashwell-j-gregory//about-us/ashwell-j-gregory/
/slander-in-virginia//blog/slander-in-virginia/
/what-happens-if-you-jump-bail-in-virginia//blog/what-happens-if-you-jump-bail-in-virginia/
/what-amounts-to-constructive-eviction-in-virginia//blog/what-amounts-to-constructive-eviction-in-virginia/
/can-someone-bring-an-adverse-possession-claim-against-your-home//blog/can-someone-bring-an-adverse-possession-claim-against-your-home/
/virginia-breach-of-contract//blog/virginia-breach-of-contract/
/virginia-spousal-support//blog/virginia-spousal-support/
/virginia-divorce-laws//blog/virginia-divorce-laws/
/how-an-illegal-search-can-affect-pending-criminal-charges//blog/how-an-illegal-search-can-affect-pending-criminal-charges/
/the-expanding-scope-of-attorneys-fees-in-virginia-fraud-cases//blog/the-expanding-scope-of-attorneys-fees-in-virginia-fraud-cases/
/3-dangerous-drugs-used-by-college-students//blog/3-dangerous-drugs-used-by-college-students/
/attorney/ashwell-william-d//about-us/ashwell-william-d/
/attorney/ashwell-j-gregory//about-us/ashwell-j-gregory/
/attorney/richard-ross-bartels//about-us/bartels-richard-r/
/attorney/lehew-lindsay-j//about-us/lehew-lindsay-j/
/about-us/matthew-d-meadows/ and /about-us/meadows-matthew/ and /about-us/falco-marci//about-us/
D
No Redirect Needed
37 URLs to Block, Suppress, or Ignore
37 URLs
These don't need redirects — some need blocking, some need GSC parameter settings, some should just be left to 404.
🚫 Wildcard Paths (11) — Block in robots.txt
/app/*, /wp-content/plugins/*, /wp-content/themes/*, /app/uploads/*, /wp-*.php etc. These are bot-generated. Add Disallow: rules in robots.txt for each path if not already present.
📊 UTM + adSubId URLs (4) — GSC Parameter Settings
GBP tracking links got indexed. Do not redirect — that creates loops. Instead: GSC → Settings → Crawling → URL Parameters → add utm_source, adSubId as "doesn't affect content."
🔧 ?et_blog Parameter URLs (9) — Block in robots.txt
Add Disallow: /*?et_blog to robots.txt. Also add GSC URL parameter rule for "et_blog." These appear in both the Screaming Frog crawl (15 URLs) and GSC 404s — block them in both places.
🗑 Junk / Spam URLs (13) — Let Die
Malformed bot URLs, broken template literals, pagination spam (e.g., /ashwell-william-d/1000/, /wp?s={search_term_string}, /contact//1000). No real traffic, no link equity — leave as 404.
How to Deploy — Step by Step
1
Install the Redirection plugin WordPress Admin → Plugins → Add New → search "Redirection" by John Godley. Free, supports regex, logs every redirect hit, and imports/exports via CSV.
2
Add the two regex rules (Fix A) and test immediately Redirection → Add New → toggle "Regex" ON. Add Rule 1 and Rule 2 from Fix A above. Test: visit /blog/2023/09/slander-in-virginia/ — should land on /blog/slander-in-virginia/.
3
Bulk-import Fix B and C via CSV Redirection → Import/Export → Import. Prepare a CSV with columns: source_url, target_url, code (301). Handles all ~87 individual redirects in one batch rather than entering them manually.
4
Add robots.txt rules and GSC URL parameter settings Block wildcard paths and ?et_blog. Add utm_source, utm_medium, adSubId to GSC URL Parameters as "doesn't affect content."
5
Resubmit sitemap + use GSC Validate Fix After deployment: GSC → Sitemaps → resubmit. Then Indexing → Pages → Not Found (404) → "Validate Fix." Allow 2–4 weeks for the 404 count to begin dropping in Crawl Stats.
Test regex rule: /blog/2023/09/slander-in-virginia/ → lands on /blog/slander-in-virginia/ with 301 in browser Network tab
Test practice area redirect: /criminal-defense/ → /warrenton-criminal-defense-lawyer/
No chains: All old URLs resolve to a 200 in two hops max. Run Screaming Frog against the old URL list after deployment to verify.
GSC 404 count trending down: Check Crawl Stats → Response table 2 weeks after deployment. Should be heading toward 3%.
Discovery ratio trending up: Crawl Stats → Purpose table → Discovery % should rise above 15% within 45 days.