← Back to SEO Report ← Page analysis

Legal Management Software — SEO Improvements

maatdesk.com home page  ·  Maatdesk  ·  Audited 2026-09-02, edited 2026-09-03 and 2026-09-04, counts re-verified 2026-09-04  ·  HomePageSkin.cshtml + content/En/articlemetas.cshtml + content/Es/articlemetas.cshtml + _Layout.cshtml + _LayoutLandingPage.cshtml + Lp/campaign-landing-page/En/article.cshtml

URL https://maatdesk.com/
Target Keyword legal management software
604 → 1,976
Visible words on the page (+227%)
8 → 64
Exact-phrase occurrences · 103 kw tracked
7 → 33
Keywords present on the page (+26)
14,800 → 43,730
Monthly search volume touched
0 → 5
FAQ items · native <details>, no JS
15 → 19
Internal links · 3 to the blog cluster
6 → 7
JSON-LD nodes · 7 ids, 0 dangling refs
3 → 4
VideoObjects · all four field-complete
0 → 4
«legal management software» — H1+title+meta+body
1 → 0
«best legal software» — the one deliberate trade
12 → 13
Page sections · reordered twice, no copy lost
34 → 0
data-aos animations in the feature grid
THE HEADLINE: 331 clicks and 3,975 impressions at average position 6.55 — and almost all of it was the brand name. maatdesk.com ranked for 0 of the 350 keywords in the gap study. «maatdesk» alone drew 6,895 impressions at position 1.1. The exact query «legal management software» returned ZERO GSC rows across the full three-month window and appeared zero times on the page, while carrying 5,400 volume at KD 29 — the highest single volume in the study. Meanwhile clio.com's bare home page holds 115 keywords / 47,100 monthly volume and mycase.com's holds 167 / 46,940. The page was not losing a ranking contest; it was not entered in one.
The H1 & Meta Tags — H1 retargeted onto a 5,400-volume term · title matched to it · description rewritten · og:type was invalid
The H1, the <title> and the definition sentence each named a DIFFERENT category. The H1 said «Legal Practice Management Software», the title said «Best Legal Software», and the opening sentence said something else again. All three now say legal management software — 5,400 vol / KD 29 / CPC $53.22, pure Commercial intent, and the term Clio ranks #1 for with its bare home page.
Views/HomePage/HomePageSkin.cshtml  ·  content/En/articlemetas.cshtml  ·  git ref 80ba76b
@* H1 — RETARGETED. "legal practice management software" 4,400 / KD 32 / Commercial+Informational  ->  "legal management software" 5,400 / KD 29 / Commercial. The demoted phrase was NOT dropped: it moved down to the tabs H2 and the definition paragraph, so both clusters stay covered. *@
@* was: <h1>Legal Practice Management Software Re-Imagined.<br><span class="text-green">6 Months Free</span></h1> *@
<h1>Legal Management Software</h1> <span>Re-Imagined.</span><br>
<span class="text-green">6 Months Free</span>

@* TITLE — 50 chars, and it now carries the H1 term. THE TRADE IS REAL AND WAS ACCEPTED: "best legal software" (390 vol) lost its only occurrence on the page, and one of the two "legal software" (2,400) hits went with it. Bought "legal management software" (5,400) in the title. *@
@* was: Best Legal Software for Law Firms *@
<title>Legal Management Software for Law Firms | Maatdesk</title>

@* DESCRIPTION — 160 chars. The old one LED WITH A THIRD CATEGORY ("legal software") while the title and H1 said "legal management software", carried 74 characters of filler ("designed to meet the most demanding case management and legal practice needs"), and omitted both differentiators that drive clicks. *@
<meta name="description" content="Legal management software for solo, small, and midsize law firms. Case management, billing, documents, and unlimited e-signatures in one plan at $29/user/month." />

@* og:type — was "Home Page article", which is NOT A VALID OPEN GRAPH TYPE. Now "website". article:tag / article:published_time / article:modified_time REMOVED with it: those properties only apply when og:type is "article". og:locale "en_US" added, explicit because the site is English-only. *@
<meta property="og:type" content="website" />
<meta property="og:locale" content="en_US" />

@* NOT FIXED — NEEDS A DESIGN ASSET. og:image / twitter:image is thumbnail.jpg at 600x600, correctly declared 600x600, but twitter:card is summary_large_image, which wants 1200x630. A square gets cropped or downgraded to a small card on X, LinkedIn and Slack — which is also how links preview in AI chat surfaces. *@

@* MAINTENANCE — the Es meta file got the IDENTICAL changes so the two cannot drift. The site is English-only and that folder carries the same English strings; deleting it is a separate decision. *@

The description rewrite was a TRADE, and the keyword table records it as one: «legal management software» 3 → 4 (gained the meta slot) · «legal software» 4 → 3 (lost it) · «software for lawyers» 2 → 1 (lost it). Net −1 occurrence, 65 → 64. It was taken anyway, because the meta now agrees with the title and the H1 instead of naming a third category. Descriptions do not affect ranking; they affect CTR, and this page sits at position 6.55 with 8.33% CTR.
And the honest note on the H1 itself: Clio ranks #1 for «legal management software» without that phrase as its H1. An exact-match H1 is a signal, not the ranking lever. What the change bought is coherence across title, H1, H2 and the definition sentence, plus the higher-volume, lower-difficulty, purely commercial term as the anchor. What it cost is that the page now anchors the 15,880-volume «legal / law management software» cluster instead of the 23,060-volume «practice management» one — which is why that phrase was demoted rather than deleted.

Keyword Coverage — Was / Now — 103 rows · 26 rose, 1 fell, 69 of 102 non-brand rows still at zero · occurrences 8 → 64
Gap study 350 kw / 81,610 vol  ·  Semrush bulk US 2026-09-02 (17 kw) + 2026-09-03 (57 kw)  ·  GSC last 3 months to 2026-09-02  ·  WAS = git 80ba76b, NOW = working tree 2026-09-04
KeywordGrpVolKDCPCClio/MyImprPosWasNowΔNote
legal management softwareCORE54002953.221h/15b0—04+4⭐ THE NEW PRIMARY. Highest volume in the study, lowest KD of the head terms, and it was on the page zero times. Now H1 + title + meta + body. Clio ranks #1 for it with its bare home page
law practice management softwareCORE44003153.226h/4h41.514+3definition H2 + prose + the demo image alt
legal practice management softwareCORE44003253.227h/1h34.015+4DEMOTED from H1 to the tabs H2 — and it went UP. The FAQ answers lifted it from 2 to 5. Demoting a term is not dropping it
cloud based legal practice management softwareCORE36002758.684h/80—01+1now the tabs H2, verbatim
case management softwareCASE36003529.491h/43291.204+4inside the case-management card H3; position 91 says the page was never in the running
law firm management softwareCORE29003153.223h/1h0—01+1⭐ The highest-volume keyword with ZERO mentions anywhere. Now in the hero paragraph. Semrush calls it Informational, but Clio (#3) and MyCase (#1) both rank with bare home pages — the SERP reads commercial
legal softwareCORE24002331.871h/11b0—23+1survived the title change; now meta description + two blog anchor texts
practice management software lawCORE24002653.224h/200—00=BIGGEST REMAINING GAP, and deliberate. A word-order variant no heading can carry without reading as stuffing
law practice softwareCORE24002853.223h/100—11=⚠ PROTECTED. Lives only in the hero image alt «Woman presenting law practice software». A Razor comment in the file says not to reword it
legal case management softwareCASE24003048.213s/1h31.004+4OWNED by /legal-case-management-software, which sits at position 1.0
legal document management softwareDOCS19003645.81—0—02+2bigger than assumed before the bulk pull; H3 + body
legal billing softwareBILL19003875.63—348.303+3CPC $75.63 — second-highest commercial value in the table
ai legal assistantAI19006214.87———00=LEFT ALONE — KD 62 is the whole AI market, not just legal vendors. Long game for /ai-tools
law firm softwareCORE16002428.85—0—02+2now the feature-grid H2 verbatim: «All-in-One Law Firm Software»
legal management softwaresCORE16002853.221h/160—00=plural of the new H1. Not written out — Google resolves it to the head term
law management softwareCORE13003153.224h/10—00=truncated variant, same call
legal ai softwareAI10005829.92———01+1the REAL AI term — the page had been using the 0-volume phrasing instead
attorney practice management softwareCORE8802341.038h/200—01+1entered via the role-targeted why-choose intro. Clio ranks #8 with its home page
lawyer practice management softwareCORE8802953.227h/40—00=NOT FORCED — stiff English no heading would carry
law office softwareCORE72018——0—01+1found only in Semrush's keyword-ideas panel, never in the gap study. Folded into a FAQ answer
software for lawyersCORE7201942.421h/30—11=gained the why-choose intro, lost the meta slot in the same pass
legal case managementCASE5902925.332/10—05+5largest gain on any single row — the FAQ definitional answers did this
legal time tracking softwareTIME5903035.65—636.502+2OWNED by /legal-time-tracking-software
legal calendaring softwareCAL4802136.41—40031.902+2400 impressions at position 31.9 with KD 21 — a page-quality problem, not a difficulty problem
e-signature softwareESIGN4805212.25—0—00=DROPPED AS A TARGET — hardest in the table, and generic: it competes with DocuSign and Adobe, not with legal vendors
best legal softwareCORE3903035.452h/270—10−1⚠ THE ONLY ROW THAT FELL, and it was a trade: gave up its single slot when the title changed. 390/mo for 5,400/mo
legal task management softwareTASK2602196.506h/946231.101+1HIGHEST CPC IN THE TABLE at $96.50, 462 impressions, position 31.1
best legal practice management softwareALT2603036.47———01+1entered via the «why firms choose Maatdesk» H2 subline
legal contact managementCONT21040.00—5135.702+2⭐ KD 4 — the softest target in the entire data set. 513 impressions already at position 5.7
small law firm softwareSIZE2102340.42———01+1confirms «Solo, Small, and Midsize Firms» is a real segment, not just copy
legal analytics softwareRPT170120.00———01+1easy win in an otherwise thin cluster
legal contact management softwareCONT1401089.11—25225.102+2⭐ KD 10 at CPC $89.11 — the best value-per-effort row in the table
client portal software for law firmsPORT110170.00—12530.401+1OWNED by /client-portal
what is legal case management softwareQUES11018————01+1ENTERED via the new FAQ — the cluster where the content type was missing, not just the words
trust account managementTRUST90222.19—2516.812+1H3 «Trust Account Management»
clio vs mycaseALT2601341.81———00=NOT A HOME-PAGE TERM. Needs /clio-vs-mycase. A home page cannot place head-to-head
clio alternativeALT40840.27———00=same — the standing ALTERNATIVES recommendation
mycase alternativeALT10451.22———00=KD 4 at CPC $51.22 — the cheapest expensive keyword on record here
ai legal software for lawyersAI0—0.00—3436.700=⚠ DROPPED AS A TARGET — 0 volume, no intent, no KD, and it is the phrasing the page had been using
maatdesk (brand)BRAND————68951.12424=22 in body/alt + title + meta description. Unchanged on purpose — and it is where essentially all the traffic came from
Full table: 103 rows, merging the gap study, two Semrush bulk exports and the Questions panel into one volume-sorted list. The 39 rows above are the decision-relevant ones. Totals: occurrences 8 → 64 · keywords present 7 → 33 · monthly volume touched 14,800 → 43,730 · 26 rows rose, 1 fell, and 69 of the 102 non-brand rows are still at zero.
Scope, counted identically on both sides: visible body copy, all headings, link anchor text, image alt attributes, the <title> once and the meta description once. EXCLUDED: the JSON-LD block (stripped with every other <script>, as requested), <style> blocks, HTML and Razor comments, and og:/twitter: tags that merely duplicate the title and description. Matching is substring, case-insensitive, hyphens normalised — so «Cloud-Based» counts for «cloud based».
Phrases nest, so the rows must not be summed — «Legal Case Management Software» counts once each for «legal case management», «case management software» and itself. Δ counts a string; it is not a ranking signal, and higher is not automatically better.
MISSING DATA, stated plainly: every BLK1 / BLK2 / QUES row reads «—» under Clio/My because those exports carry no competitor columns. A Keyword Gap run (maatdesk.com vs clio.com vs mycase.com) is still needed to complete them. «law office software» additionally has no CPC or Intent — it is not in the 350-keyword gap study at all.
What the Data Says — 350 gap keywords + 74 bulk keywords + the GSC query set, and what each cluster is actually worth
GSC last 3 months to 2026-09-02: 331 clicks · 3,975 impressions · 8.33% CTR · avg position 6.55
The competitive baseline — the home page was not in the race at all
maatdesk.com ranked for 0 of the 350 gap keywords — not top 100 for any of them. A «Maat rank» column would read «none» on every commercial row, which is why the table does not carry one. clio.com home page: 115 keywords / 47,100 monthly volume. mycase.com home page: 167 keywords / 46,940. Both rank on their bare home pages for the head terms this page is now built on — which is the evidence that these are home-page terms and not subpage terms. Home page traffic was almost entirely brand: 6,895 brand impressions at position 1.1, against 3,975 impressions on the URL as a whole.
The easiest keywords in the data set are the ones the site ranks WORST for SUBPAGES ALREADY EXIST FOR ALL NINE
KeywordKDGSC imprOur positionOwning subpage
legal contact management45135.7/legal-contact-management-software
legal contact management software1025225.1/legal-contact-management-software
legal task management1423726.1/task-management-tool-for-attorneys
law firm client portal software146430.1/client-portal
task management software for lawyers1611834.5/task-management-tool-for-attorneys
client portal software for law firms1712530.4/client-portal
law firm calendaring software1810036.5/legal-calendaring-software
legal calendaring software2140031.9/legal-calendaring-software
legal calendar software2115631.5/legal-calendaring-software
KD 21 with the page sitting at position 31 is a page-quality problem, not a difficulty problem. These are the softest targets in the whole data set, the subpages already exist, and the home page's job here is to link to them, not to outrank them — which is what the 13-card feature grid now does.
High CPC, low difficulty — best commercial value per unit of effort CPC IS THE CLEANEST PROXY FOR COMMERCIAL VALUE HERE
  • legal contact management software — 140 vol, KD 10, CPC $89.11 0 → 2
  • legal task management software — 260 vol, KD 21, CPC $96.50 0 → 1
  • billing software for law firms — 480 vol, KD 30, CPC $75.63
  • legal billing software — 1,900 vol, KD 38, CPC $75.63 0 → 3
  • law firm calendaring software — 70 vol, KD 18, CPC $44.58
  • mycase alternative — 10 vol, KD 4, CPC $51.22 NEEDS ITS OWN PAGE
What the new bulk data changed — three terms that were assumed small
legal billing software 1,900 · legal document management software 1,900 · law firm software 1,600. Together 5,400 monthly volume — exactly equal to the entire new H1 primary, and all three had been treated as minor feature terms. All three are now on the page: two as feature-grid H3s and «law firm software» as the grid H2 verbatim. This is the argument for running the bulk pull before writing headings rather than after — the section that would have been written anyway was worth 5,400/mo once the heading matched the term.
Verdict by opportunity group — including the three that were told to stop
ClusterVol/moKD rangeVerdict
ALTERNATIVES7204–13⭐ BEST OPPORTUNITY IN ANY DATA SET. Highest CPCs on record ($36–51), buyers already shopping to switch, and Clio ranks #1 for our own primary term. ACTION: dedicated pages — /clio-alternative, /clio-vs-mycase, /mycase-alternative. Not home page content
AI3,82054–62Largest volume found, hardest difficulty — this is the whole AI market, not just legal vendors. Long-term play for /ai-tools
REPORTING5402–41Two easy wins: «legal analytics software» 170/KD 12 and «law firm business intelligence» 50/KD 2. «law firm management reports» is 0 volume — the phrasing to avoid
FIRM SIZE36011–23«small law firm software» 210 / KD 23 / $40.42 confirms the «Solo, Small, and Midsize Firms» positioning is a real segment
SECURITY50010–26⚠ STOP OPTIMISING IT. All Informational, and every commercial-sounding variant is 0 volume — «legal software security» = 0. Only «law firm cybersecurity» (390/KD 26) has demand, and its intent says blog post, not a home page heading
MIGRATION405–22Effectively no demand. The one qualified term is «clio data migration» (20/KD 7, Navigational + Transactional) — people mid-switch. Pairs with ALTERNATIVES
E-SIGNATURE4017–61⚠ STOP OPTIMISING IT. «legal e signature software» = 0 volume at KD 61, the worst combination in the data. No legal-qualified e-sign term has demand at all
PRICING5010–27Far smaller than GSC impressions implied. Not worth head-term targeting; the existing cost blog post already covers it
Two of these verdicts are instructions to STOP work, not to start it. The security and e-signature sections are good copy and they stay on the page — they are just not keyword targets, and treating them as such was spending effort against zero demand.
SERP features and the demand the tools disagree about TREATED WITH CAUTION
Every one of the 17 bulk keywords returns an AI OVERVIEW. All 17 also show Reviews and Video. Ranking alone will not capture those clicks — the pages need answer-shaped copy and review/video markup, which is the direct justification for the FAQ block and the two video passes below. WHERE SEMRUSH AND GSC DISAGREE: «switch legal practice management software» reports 0 Semrush volume but 61 real GSC impressions — the switching tail is bigger than the tool sees. Not big enough to restructure the page around, and recorded rather than acted on.
AND THE OPPOSITE CASE: the PRICING cluster showed meaningful GSC impressions but totals only 50/mo of real volume. Impressions are not demand — they are what Google chose to show, on queries that may never convert.
DATA QUALITY NOTE: row 61 of the source table is truncated at the column width — it reads «how to choose legal practice management softwa». The real keyword ends in «software» and is present on the page once, in the FAQ H3. Any script matching that column with a word-boundary anchor will report a false 1 → 0.
Content Changes — 604 → 1,976 visible words · four new sections · 1 H1 / 12 H2 / 35 H3, no level skips
The page tripled in content, and every new section exists because a measurement said something was missing — a keyword at zero, a content type absent, a role never addressed, or a competitor never named. No new product claims were introduced anywhere. Each new section restates copy or figures that already existed elsewhere on the site.
Views/HomePage/HomePageSkin.cshtml  ·  listed in page order  ·  NEW = the section did not exist before
The definition sentence named a different category from its own H1 FIXED 09-03
The opening definition read «is a … software» — uncountable noun treated as countable — and it named a category the H1 did not. Now: «Maatdesk is legal management software for solo, small, and midsize law firms in the United States. It is law practice management software that brings case management, …» The H1 term leads as the predicate, and the practice-management phrase stays in the same paragraph, so both clusters are covered and H1 / title / H2 / definition finally agree with each other.
The page addressed the USER of the software and never the BUYER AUDIENCE PASS 09-03
«attorney» appeared 14 times and «law firm» 11 times. «managing partner», «firm owner», «partner», «paralegal» and «office manager» appeared ZERO times. On the keyword side, «attorney practice management software» (880 / KD 23) and «software for lawyers» (720 / KD 19) were both at zero in the body — and Clio ranks #8 and #1 for them with its bare home page, so they are home-page terms, not subpage terms. A role-targeted intro paragraph in the why-choose section now carries both, plus «partners and firm owners».
NOT FORCED: «lawyer practice management software» (880 / KD 29). The exact phrase is stiff English that no heading would carry — the same call as «law management software» and «practice management software law».
Competitor names appeared zero times — a GEO problem, not an SEO one GEO PASS 09-03
clio, mycase, practicepanther, smokeball, filevine, rocket matter — all ZERO. The migration copy said «migrates firms from any existing platform», which matches nothing a model retrieves on. Now: «Firms move to Maatdesk from Clio, MyCase, PracticePanther, and any other platform.» Only the three the company already names on its own campaign landing page are listed, so no new claim is introduced.
WHERE SEO AND GEO DIVERGE, AND IT MATTERS HERE: the ALT keywords (310/mo at CPC $40–51) still need dedicated pages to RANK — a home page cannot place head-to-head. Naming the platforms is for CITATION in generative answers, not for ranking. The dedicated-page recommendation stands unchanged.
FIXED IN PASSING: the campaign landing page comparison table misspelled a competitor as «Practic Panther». That file is Windows-1252, not UTF-8, so it was patched at byte level rather than re-saved.
Four sections added, each closing a measured gap
  • FAQ — five native <details> items. The QUES rows were the only cluster where the CONTENT TYPE was missing, not just the words: nothing on the page was question-shaped. Side effect: the definitional answers lifted head terms that were already present — «legal practice management software» 2 → 5, «legal case management» 2 → 5, «case management software» 1 → 4. Density stays about 0.3% on a ~1,900-word page NEW 09-04
  • «Why firms choose Maatdesk». Six differentiators — $29/user/mo, six months free, free data migration, free live onboarding, unlimited e-signatures, Azure — existed but were spread across five sections and framed as features, so nothing answered «why Maatdesk» in one place. Targets «best legal practice management software» (260 / KD 30 / $36.47) in the H2 subline. Adds NO new claims — every line restates copy already on the page NEW 09-03
  • «What changes after you switch». Deliberately NOT keyword-optimised: the outcome and cost terms have no demand («legal software cost» 0, «law firm software cost» 0, whole PRICING cluster 50/mo). Its value is AI-Overview citability plus internal linking. The timeline answer is a RANGE by design — our own post argues there is no responsible universal timeline and calls out vendors who present data-import time as full implementation time, so a fixed «set up in N days» would contradict it. Published range used verbatim NEW 09-03
  • Google Reviews block (Elfsight) + a YouTube facade in the closing CTA. Every one of the 17 bulk keywords shows Reviews and Video in the SERP. See the structured-data section for what the reviews widget does and does not deliver NEW 09-04
NO INVENTED NUMBERS — the rule that shaped the outcomes section RULE APPLIED
Nothing on the site substantiates a money or time saving. The only hard figure published anywhere is the 99.9% uptime guarantee, and the one external citation (2021 Legal Trends Report) is five years old and correlational, not a Maatdesk outcome. The six outcomes therefore restate /blog-post/why-maatdesk-is-an-excellent-option-for-law-firms rather than quantifying anything. On a page whose most commercially valuable question is «what will this save me», that omission was a deliberate cost.
Duplicate content removed — the demo block was restating a whole section ~100 WORDS CUT
The «See Maatdesk in Action» block carried a migration paragraph that repeated the DATA MIGRATION section almost word for word — two clauses were identical. Migration now lives only in its own section, and the demo block is short conversion copy again — which also lifts its two CTAs back up the panel.
The DATA MIGRATION heading was reworded in the same pass: it said «Data Migration» twice and billed the product as an «Enterprise Solution», which contradicts «for Solo, Small, and Midsize Firms» in the definition H2. Not keyword-optimised — that cluster is 40/mo with no qualified head term.
Section order rebuilt, then revised — 13 sections, no copy changed 09-04, TWICE
#SectionRole
1heroH1
2definitionwhat Maatdesk is
3tabs — cloud-based practice managementfeatures
4All-in-One Law Firm Softwarefeatures
5securitytrust — was breaking the feature narrative in half at 47 words between a 315w and a 374w block
6switching / free data migrationdifferentiators
7why firms choose Maatdeskdifferentiators
8unlimited e-signaturesdifferentiators — was stranded at #11, AFTER the testimonials, cut off from its own cluster
9attorney video testimonialsproof
10what changes after you switchoutcomes — a text grid placed between two card grids so the two proof blocks stop reading as one
11Maatdesk reviews on Googleproof
12FAQobjection handling — was at #9 between two persuasion sections, at 317 words the third-largest block on the page
13See Maatdesk in Action + videoCTA
NO COPY CHANGED. Whole <section> blocks were moved with their leading Razor comments and scoped <style> blocks attached. Verified by multiset comparison: all 1,998 non-blank lines identical before and after, only reordered. Section and div balance unchanged (11/11, 150/150), keyword counts unchanged at 65/33. Pre-reorder copy kept at scratchpad/HomePageSkin.prereorder.cshtml.
Three sections had been appended at the same convenient insertion point rather than placed — that, not authoring, was the actual defect.
Layout and animation pass — and the one place scoped CSS was unavoidable
  • DATA MIGRATION and E-SIGNATURES mirrored — heading left / paragraph right at 5fr–6fr, then paragraph left / heading right at 6fr–5fr, so two prose cards alternate instead of repeating one layout NO NEW COLOURS — every value is a token already in main.min.css
  • In the mirrored section the HEADING STAYS FIRST IN THE DOM; only the desktop column order flips, via grid order. Screen readers and crawlers follow source order, and below 768px CSS order does not apply — swapping the markup would have read backwards in both cases
  • Scoped CSS was required, not utilities. .service-card is flex / centred and .prose-text is 68ch / centred. An id selector plus a class is (1,1,0), which beats .service-card p.prose-text at (0,2,1) — an id outranks any number of classes — so there is no !important anywhere
  • All 34 data-aos attributes removed from the feature grid on request, plus .floating-effect2 (an 11s infinite float) and .animate-pulse (a 2s infinite blink). The last two were infinite loops. Small LCP gain too: nothing in the grid starts at opacity 0 now CLIENT REQUEST
Grammar pass — all 133 lines of live copy read 09-04
#WasNowWhy
1«6 Months Free Trial.»«6-Month Free Trial.»a plural noun cannot modify another noun. The hero badge «6 Months Free» is a different construction and is correct as it stands
2the security paragraphtwo complete sentences, sentence casefour problems in one sentence — a double space, a fragment with no main verb, «Providing» capitalised mid-sentence, and Title Case used as emphasis
3«Microsoft's $20B Cybersecurity Technology»«the $20B cybersecurity technology behind Azure»as written it scanned as Maatdesk describing its own spend. Same claim, correctly attributed
4«Maatdesk Makes Switching Simple.»sentence caseconsistency with every other heading
NOT FIXED, DELIBERATELY: FAQ item 3, «How to choose legal practice management software», is the only one of five not phrased as a question. Changing it would require the same edit in the FAQPage schema to keep the two in sync, and the phrase is itself a QUES-row keyword (40/mo).
CLEAN on re-check: apostrophes all correct, no doubled words, no missing spaces after periods, no straight/curly quote mixing, em dashes consistent, all 16 alt attributes present. Every issue found was in older pre-existing copy; the newer sections were clean.
WORTH KNOWING BEFORE GREPPING THIS FILE: lines 9–168 are ONE Razor comment holding an old hero slider, with stale copies of the security paragraph, the migration paragraph and an outdated hero inside it. Dead code, does not render — and it will give you two hits for any phrase you search.
FAQ Roster — 0 → 5 items · native <details>, no JavaScript · seven keywords entered the page
The QUES rows were the only cluster where the CONTENT TYPE was missing, not just the words. Nothing on the page was question-shaped, and every one of the 17 bulk keywords returns an AI Overview — which rewards short, extractable answers. This was the highest-priority addition for that reason, not for the volume, which is modest.
HomePageSkin.cshtml  ·  5 <details> items · 317 words · FAQPage JSON-LD extracted from the rendered HTML
The five items, and the keyword each one closes
1What is legal practice management software? 40 vol / KD 24 · 0 → 1
2What is legal case management software? 110 vol / KD 18 · 0 → 1
3How to choose legal practice management software 40 vol · 0 → 1 NOT PHRASED AS A QUESTION — ON PURPOSE
4Matter management software for corporate legal departments 40 vol / KD 16 · carried in the answer copy
5Software for small law firms 210 + 70 vol · 0 → 1 each
«law office software» (720 / KD 18) and the SIZE terms were folded into answers rather than given their own section. A definitional answer can list what a category is also called without straining — which is something no heading could have done without reading as a keyword list.
SIDE EFFECT, and it was the larger one: the definitional answers lifted head terms already on the page — «legal practice management software» 2 → 5 · «legal case management» 2 → 5 · «case management software» 1 → 4 · «legal case management software» 1 → 4.
Built on native <details>, NOT the site accordion — and the reason is that the accordion would not have worked VERIFIED BEFORE WRITING
The .accordion-item-new pattern used on service pages depends on _astro/js/lp.js and _astro/lp.css, loaded only by ServicePageSkin and the pricing page. accordion-item-new, content-wrapper-new, contentInner-new, plus-icon and minus-icon are ALL absent from main.min.css — that markup would have rendered unstyled here and stayed stuck at height:0 with no script to open it.
<details> needs no JS, keeps every answer in the DOM for crawlers and AI retrieval, and is accessible by default. Scoped styles reuse existing site tokens: --color-maat-text, the .border-faqs hairline #a09d9d30, and #1a8858 green. Copying the house pattern would have shipped a broken block.
FAQPage JSON-LD — added inside the existing graph, and stated honestly
Added as a node inside the EXISTING @graph rather than as a second ld+json block, so the page keeps one graph and the FAQPage points at the Organization node via publisher. The five questions and answers are extracted from the rendered HTML, so schema text and visible text are identical — verified by string match, which is what Google requires. NOTE, STATED RATHER THAN GLOSSED: Google retired FAQ rich results for most sites in 2023. The value here is machine parsing and AI retrieval, not a SERP snippet.
Every «@» inside the block is escaped «@@» for Razor; the only single «@» characters are the 8 pre-existing @(Settings…) expressions. This changes NO count in the keyword table, which excludes schema by design.
Links — internal 15 → 19, all resolving · 3 new links to the decision-stage blog cluster · rel=noopener added site-wide
THE REAL FINDING: the home page had 15 internal links and NOT ONE pointed at the blog — where 19 posts live, including a whole decision-stage cluster: migration timeline, white-glove onboarding, implementation checklist, switching without disruption, and software cost. Those posts answer the QUES rows that nothing on the page addressed («how to choose legal practice management software» 40, «how to choose legal case management software» 30).
19/19 internal links resolve · 24/24 images and tab videos exist on disk · audited 2026-09-04
6.1 Internal — 15 → 19, three of them to the blog +4
The /pricing link is the one that should have existed all along: the home page body linked 14 feature pages but never /pricing, despite the price claim sitting in the copy and «legal practice management software pricing» (20 / KD 16) being a live term.
Side effect of the blog links: «legal software» went 1 → 3, picked up in the anchor text.
A FALSE POSITIVE, RECORDED: an earlier «Maatdesk Mobile App has no link» finding was wrong — all 13 feature cards are wrapped in an anchor to their owning subpage. The detection script's search window had been pushed past the anchor by a long Razor comment. The tool was broken, not the page.
6.2 The two Razor URLs resolve — checked because a sibling page had already failed this way VERIFIED
GetTrialUrl → /free-trial and getScheduleMeetungURL → /book-a-demo, both resolved through appsettings.json. Both exist AND are registered in App_Data/UncategorizedPageEntities.xml, so both are routable. Existing on disk is not sufficient in this codebase — registration is what makes a page routable, and that is exactly what /lp/campaign-landing-page was missing when it 404'd. A URL that resolves in the config and returns 404 in production is the failure mode this check exists to catch.
6.3 External — rel="noopener" added to 7 links, site-wide SHARED HEADER, MENU AND FOOTER
Internal target="_blank" links were left alone — same-origin window.opener is not a risk. This fix is site-wide, not page-scoped, because the affected links live in the shared header, menu and footer.
6.4 Cannibalisation check — the home page is clean, and the conflict is elsewhere
The feature grid repeats nine H3s that are the exact titles of subpages marked OWNED in the keyword table — and every one of the 13 cards links to its owning subpage. That is hub-and-spoke, the opposite of cannibalisation. GSC agrees: /legal-case-management-software sits at position 1.0 and /legal-contact-management-software at 5.7. Repetition that points somewhere is a hub; repetition that competes is cannibalisation, and this is the first.
REAL CONFLICT, BLOG vs BLOG: /blog-post/switching-legal-practice-management-software (523 words) vs /blog-post/switching-legal-software-without-disrupting-your-firm (1,224 words). Same head term in both titles, overlapping FAQs — both answer «how long does migration take» and «what transfers». RECOMMENDATION: do NOT merge. The thin post's unique asset is its H2 «Looking for a Clio Alternative, MyCase Alternative, or PracticePanther Alternative?» — and the ALT cluster is the best untapped opportunity on the site. Retitle and refocus it as the ALT page instead; the title collision disappears and the other post owns «switching» cleanly. It needs real expansion at 523 words, with sourced competitor pricing — not just a new title.
THE CEILING THAT MAKES THIS WORTH DOING: at KD ≤ 13 the domain averages position 15.4; at KD ≥ 14 it averages 36.7. Every ALT keyword is under that ceiling.
MILDER, WATCH ONLY: /pricing vs /blog-post/how-much-does-legal-practice-management-software-cost. Both open with the same head term plus the price, but the intents differ (our plan vs a market comparison). Watch the two URLs in GSC for position trading rather than acting now.
JSON-LD & Entity Data — one @graph, 6 → 7 nodes · 7 unique ids, no dangling refs · two nodes removed, two added, three fixed
Three of the changes below REMOVE markup rather than add it, and one open item is the only thing in this whole workstream that carries risk: the Elfsight reviews widget is injecting a second ld+json block with a fabricated sku and mpn for software that has neither. That is a dashboard setting, not a code fix.
Node 1
Organization
aggregateRating REMOVED 4.7 / 15 REVIEWS
  • Nothing on the page showed a rating — no number, no stars, no review count — and only 3 testimonials exist, not 15
  • Google requires rating markup to reflect content visible on the page and to come from real users. Invisible ratings are the category that draws structured-data manual actions
  • It was also on Organization, which makes it self-serving and therefore ineligible for review snippets anyway — the risk without the benefit
  • TO RESTORE IT LEGITIMATELY: publish the actual ratings on the page with a visible average and count, then mark up what is shown
areaServed ADDED RESCUED FROM A DELETED NODE
areaServedCountry «United States» — moved here because schema.org does not allow areaServed on SoftwareApplication
noteaddressCountry «US» and areaServed are different claims — where the company IS versus the market it SERVES
Removed
Service — and a correction to the reason given for removing it
Why it went
  • It described the same offering as SoftwareApplication with less detail — no offers, no description, no url
  • SoftwareApplication already carries applicationSubCategory «Legal Practice Management Software» plus the identical audience
  • Verified nothing referenced #service before removing it
CORRECTION THE FIRST WRITE-UP OF THIS WAS WRONG
  • It was 4 of 5 properties duplicated, not all 5. Service also carried areaServed, which SoftwareApplication cannot hold
  • So the market signal WAS lost with the node, and had to be restored on Organization. The page copy says «law firms in the United States»; now the schema does too
Node 2
SoftwareApplication
Checked and correct, left alone
offersall three match /pricing exactly — $0 trial, $39 monthly, $29 annual
videowas a single ref to #video; now an array of #video and #video-dashboard
not includedthe two testimonial videos — they are client statements, not product demos
aggregateRating DECLINED here too REVISIT AT 40–50 REVIEWS
  • This type is NOT covered by the self-serving restriction, so it is the one legitimate route to stars
  • But 16 reviews is too low to help, and a hardcoded ratingValue drifts out of sync with the widget — worse than no markup
  • When it is revisited: pull the numbers from the Google Places API server-side rather than hardcoding them
Nodes 3–6
VideoObject ×4
#video-dashboard ADDED — every field pulled from YouTube's own page source NOTHING INVENTED
uploadDate2026-07-16T10:00:00-07:00
durationPT2M3S (123s)
thumbnailUrli.ytimg.com/vi/46myhnLq6gg/maxresdefault.jpg — verified HTTP 200
transcript285 words from the auto-generated captions, [music] tags stripped and four ASR errors repaired
Both testimonial nodes FIXED WRONG DATES
  • uploadDate was 2026-08-25 for both. The real dates are 2026-08-26 (09:09:01-07:00 and 08:06:01-07:00)
  • Both were missing duration, @id and publisher, which the other nodes had. Now PT0M26S / PT0M24S, #video-novo / #video-labrador, publisher → #organization
  • All four VideoObjects now carry an identical field set
Node 7
FAQPage
«url» REMOVED MY OWN NODE, MY OWN OVER-CLAIM
  • It claimed "url": "https://maatdesk.com/", which asserts the home page IS an FAQ page. It is a home page with an FAQ section
  • The scoped @id (#faq) is kept, so the FAQ is a sub-entity of the graph rather than a claim about the page itself
  • Q&A text is extracted from the rendered HTML and string-matched against it, which is what Google requires
Open — dashboard action
Elfsight is injecting a Product node with a fabricated sku and mpn
  • Confirmed by parsing the rendered page: a second ld+json block, "@type":"Product", carrying "mpn":"108111" and "sku":"1081119" — identifiers this software does not have — plus aggregateRating 4.8/16 and one embedded review. It uses the page TITLE as both name and brand.name, and it conflicts with our own SoftwareApplication node.
  • Elfsight's setting is on/off only; the type cannot be changed. TURN IT OFF in the dashboard.
  • THE WIDGET HAS NO SEO VALUE EITHER WAY. Review text is injected client-side by platform.js — the server HTML holds an empty <div>, so GPTBot, ClaudeBot, PerplexityBot and Google-Extended see a heading with nothing under it. Removing data-elfsight-app-lazy would NOT fix this; those crawlers never execute the loader at all. Kept lazy.
  • NO STAR RATING IS POSSIBLE FROM IT. Google's policy treats reviews about entity A shown on entity A's own site as self-serving «either directly in their markup or via an embedded third-party widget» — LocalBusiness and Organization are barred outright. Same rule that removed aggregateRating above.
  • Done
    Google site verification — two files, and two is the correct number
  • Views/Shared/_Layout.cshtml line 10 — the default for every page.
  • Views/Lp/_LayoutLandingPage.cshtml line 29 — the 9 /lp/ pages. That layout is a COMPLETE standalone document (its own DOCTYPE, html and head) and sets no parent layout, so _Layout.cshtml never runs for those pages. A view that overrides Layout replaces the default; it does not add to it.
  • The three other _Layout* files in Views/Shared/ are DEAD — zero views reference them. Do not add tags there.
  • A meta tag verifies a URL-PREFIX property only. A Domain property — all subdomains, both protocols — needs a DNS TXT record instead.
  • Stated plainly
    What this markup will NOT do, and what needs no markup at all
  • Google retired FAQ rich results for most sites in 2023. The FAQPage node buys machine parsing and AI retrieval, not a SERP snippet.
  • IMAGES NEED NO SCHEMA. 16 img on the page, all 16 with alt text, none empty. ImageObject markup does nothing for ordinary content images — Google uses image structured data only for licensable images (which needs a real license page) or as a field inside Product / Recipe / Video. Alt text plus sitemap_images is already correct.
  • STILL IMPERFECT, NOT FIXED: nothing — as of the last pass all four VideoObjects match. The earlier note that the two testimonial nodes lacked duration, @id and publisher was closed on 2026-09-04.
  • VERIFIED: the graph parses as JSON after unescaping Razor's doubled at-signs — 7 nodes, 7 unique ids, no dangling internal references. The 8 single «@» characters in the block are @(Settings…) expressions and must stay unescaped.
  • Measurement Discipline — the passes that were measured rather than eyeballed, and what each one actually found
    Redundancy, keyword safety and the final recount were run as measured passes, not as re-reads. The redundancy pass found near-verbatim duplication that reading the page twice had missed — and the recount that followed it proved the fix cost nothing, which reading could not have established either way.
    Content redundancy, keyword safety and full recount — 2026-09-04
    8.1 Redundancy — the method, because the result depends on it
    Split the rendered copy by <section>, drop Razor comments / script / style, then (a) map which sections state each core claim and (b) index every 6-word n-gram and report those appearing in 2+ sections. 55 distinct 6-word phrases were shared across sections. WORST OFFENDER — #workflow-tabs vs #feature-grid, which sit back to back at positions 3 and 4. 4 of 14 grid sentences overlapped the tabs copy by 55%+, two of them near-verbatim for their first 20–22 words.
    FIXED by rewriting four grid card paragraphs to a different ANGLE rather than a shortened copy of the tabs copy: billing → invoicing from logged time, payment requests, collection status · documents → one place per matter, any device, no storage cap · tasks → owner + due date + matter link · calendar → court dates, limitation dates, internal deadlines, alerts.
    Nothing invented — every claim already appears elsewhere on the page or in the demo transcript.
    RESULT: grid sentences overlapping the tabs by 55%+ went 4 → 1, and the survivor is a false positive (an H3 scoring against another H3 on shared boilerplate words only).
    8.2 One more lift found in the same pass #why-maatdesk
    «Global threat detection, zero trust access and built-in redundancy protect every matter» in #why-maatdesk was a word-for-word lift from the security section. Replaced with a differentiator framing: «Enterprise infrastructure most firms could not buy on their own, included in the plan at no extra cost.» That is what #why-maatdesk is for — the security section already states the capability; this section's job is to say why it matters to a buyer.
    8.3 Keyword safety — the rewrite was counted before and after 16 KEYWORDS, ALL UNCHANGED
    All 16 affected keywords counted before and after the redundancy rewrite and UNCHANGED: legal billing software 3 · legal document management software 2 · legal task management software 1 · legal calendaring software 2 · legal case management software 4 · legal practice management software 5 · legal case management 5, and the rest. Because the keyword weight lives in the H3s and the tab footer links, not in these paragraphs — so rewriting the paragraphs cost nothing in the table. That was the hypothesis going in; the count is what made it a finding.
    8.4 Full recount after everything — and the result is that nothing moved THE INTENDED OUTCOME
    All 103 rows recounted against the live page. Corpus = <title> + meta description + visible body + alt text, JSON-LD excluded as the table has always excluded it. BEFORE 8 occurrences / 7 keywords. NOW 64 / 33. NO ROW CHANGED from the values already recorded. That is the point: the redundancy rewrite preserved keywords deliberately and the grammar fixes touched no target phrase. A recount that finds nothing is evidence, not a wasted pass.
    The heading renames and the video caption did add vocabulary — «dashboard», «matter status», «limitation dates» — that has no row in this table at all.
    8.5 Repetition that was measured and then deliberately KEPT
    «No extra charge» appears in 6 sections · unlimited e-signatures in 4 · one plan / one system in 4 · $29 in 3 · the six-month trial in 3 · free data migration in 3 · Azure in 3. Each instance is a different feature (migration, onboarding, e-signatures, support), and repeating a differentiator near each decision point is how conversion copy works. #why-maatdesk exists to consolidate them and the FAQ restates by design.
    Internal repetition is NOT an SEO penalty — Google's duplicate-content handling is about the same text across different URLs. Not every measurement is an instruction to change something.
    8.6 Heading duplication that WAS a real problem THREE «WHAT X SAY» HEADINGS STACKING
    WasNowWhy
    What Do Attorneys Say About Maatdesk?Attorney Video Testimonials From Real Law Firmsdescribes the format, not just the sentiment
    What Law Firms Say on GoogleMaatdesk Reviews on Googletargets the brand+reviews query buyers run before committing — the «clio reviews» pattern, which no other heading on the page covered
    eyebrow: GOOGLE REVIEWSVERIFIED FEEDBACKstops the eyebrow repeating the H2 underneath it
    The third heading — Elfsight's own «What Our Customers Say» — is rendered by the widget, is not in our code, and is not reachable from CSS. Only the two we control could be renamed, so it is now a cosmetic redundancy rather than a wording clash.
    8.7 The video in the CTA — and the caption that was justified by a word count
    The tablet still image is now a click-to-play facade for «Maatdesk Dashboard Overview | Product Walkthrough». NOT a bare <iframe>: a YouTube embed pulls ~1MB of player JS and sets cookies on every page load for a video most visitors never play. The poster stays the local webp; the iframe is created on click, from youtube-nocookie.com, with rel=0 so end-screen suggestions stay on our own channel. Same pattern as the testimonial cards. WHY THIS VIDEO: it is the only general product overview on the channel. The «Getting Started» / «How to Manage» clips are for existing users, the Spanish videos do not match an English page, the Florida Bar clip is brand not product, and both attorney testimonials are already embedded higher up.
    THE 30-WORD CAPTION WAS JUSTIFIED BY A COUNT, not by taste: a count of visible body copy put «dashboard», «matter status», «work recorded», «limitation dates» and «widget» all at ZERO, while billing/task/calendar were already at 13/13/6. Wording is taken from the video's own transcript, so it describes the video rather than making a new claim. Kept to one sentence — this block is a conversion CTA, and longer copy would restate the feature grid the same way the old migration paragraph restated the DATA MIGRATION section.
    WHAT THIS REPORT DOES NOT MEASURE. Every Impr and Pos figure in the keyword table was exported BEFORE the optimisation pass — GSC, last 3 months to 2026-09-02. Nothing here is evidence that the work changed a ranking: the tables show what the edits did to the PAGE, not what Google did with it. Re-export GSC no earlier than 4–6 weeks after these changes are live in production to see that. The baseline to beat is 331 clicks / 3,975 impressions / 8.33% CTR / average position 6.55 — and note that beating it on clicks alone would prove little, because that baseline is almost entirely brand traffic. The number to watch is non-brand impressions on the 33 keywords that now appear on the page.
    Source Index — 4 keyword data sets · 2 in-repo sources of truth · 1 external asset verified before use
    Every figure in this report traces to one of the rows below · counts re-parsed from the files on 2026-09-04
    A. Keyword data
    GAPgap.keywords_2026-09-02T16_17_46.282Z.csv — 350 keywords / 81,610 monthly volume, maatdesk.com vs clio.com vs mycase.com vs quickbase.com. The only source carrying competitor positions
    BLK1legal-billing-software_bulk_us_2026-09-02_17-07-26.csv — 17 feature-level keywords, Semrush bulk, US
    BLK2ai-legal-assistant_legal-ai-software_bulk_us_2026-09-03_14-31-18.csv — 57 opportunity keywords: security, migration, e-sign, reporting, pricing, alternatives, firm size, AI
    IDEA / QUESSemrush keyword-ideas and Questions panels — the only source for «law office software» and the five question rows
    GSCSearch Console, Web, last 3 months to 2026-09-02
    B. In-repo sources of truth — used instead of retyping anything
    • git 80ba76b — the last commit touching the home page before the edit. Every «was» count in this report is parsed from that tree, not remembered
    • HomePageSkin.cshtml + content/En/articlemetas.cshtml — the «now» counts, parsed from the working tree on the same day, so both sides are directly comparable
    • appsettings.json — the four sameAs social ids and the two Razor URLs, all confirmed populated
    • App_Data/UncategorizedPageEntities.xml — routability of /free-trial and /book-a-demo
    • /pricing — the three Offers in SoftwareApplication were checked against it line by line
    • The firm's own blog — the migration-timeline range is quoted verbatim from /blog-post/how-long-does-a-legal-software-migration-take, and the six outcomes restate /blog-post/why-maatdesk-is-an-excellent-option-for-law-firms. Nothing in the outcomes section is a new claim
    C. External, verified before use ONE ASSET
    YouTubewatch?v=46myhnLq6gg — uploadDate, duration and thumbnail read from the page source; the thumbnail URL was requested and returned HTTP 200 before being written into the schema
    transcriptthe video's own auto-generated captions, [music] stripped, four ASR errors repaired — the source of the CTA caption wording
    NOT USED AS A SOURCE: the 2021 Legal Trends Report cited in an older blog post. It is five years old and correlational, not a Maatdesk outcome — which is why the outcomes section carries no figures at all.
    Status — Done vs Open
    Two edit sessions — 2026-09-03 and 2026-09-04 · counts re-verified 2026-09-04
    ✓ Done
    • ✓ H1 retargeted onto «legal management software» (5,400 / KD 29 / Commercial); title and definition sentence brought into agreement with it
    • ✓ Meta description rewritten, og:type fixed from an invalid value, article:* removed, og:locale added — identically in En and Es so the two cannot drift
    • ✓ Content 604 → 1,976 words · four sections added · «law firm management software» (2,900, the highest-volume zero) placed in the hero
    • ✓ FAQ block added — 5 native <details> items, 7 keywords entered, built on <details> because the house accordion would have rendered unstyled and stuck at height:0
    • ✓ Audience pass — the page addressed the user and never the buyer; partners and firm owners now named
    • ✓ GEO pass — competitors named for the first time (Clio, MyCase, PracticePanther), using only the three the company already names itself
    • ✓ Sections reordered twice, verified line-for-line: 1,998 non-blank lines identical, only moved
    • ✓ Schema — invisible aggregateRating removed, redundant Service removed with its areaServed rescued onto Organization, FAQPage over-claim corrected, dashboard VideoObject added, two wrong upload dates fixed
    • ✓ Internal links 15 → 19 — the blog had never been linked from the home page at all; /pricing linked from the price claim for the first time
    • ✓ Redundancy pass — 4 near-verbatim grid paragraphs rewritten, 16 keywords counted before and after and unchanged
    • ✓ Grammar pass over all 133 lines of live copy; a misattributed «Microsoft's $20B» claim corrected
    • ✓ Google site verification added to the two layouts that actually render, and not to the three dead ones
    • ✓ rel="noopener" on 7 external _blank links in the shared header, menu and footer — site-wide, not page-scoped
    • ✓ 34 data-aos attributes and two infinite CSS animations removed on request
    ⚠ Open
    • ⚠ Elfsight Schema.org toggle is ON and injecting a Product node with a fabricated sku and mpn. Dashboard action. The only open item carrying riskeverything else on this list is an opportunity or a cosmetic issue
    • ⚠ The ALT pages do not exist — the best remaining keyword opportunity on the site. /clio-alternative · /clio-vs-mycase · /mycase-alternative. 720/mo at KD 4–13, CPC $36–51buyers already shopping to switch, and Clio ranks #1 for our own primary term
    • ⚠ Keyword Gap run still needed (maatdesk.com vs clio.com vs mycase.com) to fill the Clio/My columns for every BLK1 / BLK2 / QUES row74 of the 103 rows currently have no competitor data at all
    • ⚠ The two switching blog posts. Retitle and refocus the 523-word one as the ALT page; it needs real expansion with sourced competitor pricing, not just a new title
    • ⚠ og:image is 600×600. Needs a 1200×630 asset for Facebook / LinkedIn / Slack large cards — which is also how links preview in AI chat surfacestwitter:card is "summary", which the square does suit
    • ⚠ Elfsight's own «What Our Customers Say» heading — cosmetic only now, and not reachable from our code or CSS
    • ⚠ Elfsight per-card CSS uses unverified [class*="eapps-"] substring selectors. Confirmed NOT matching — cards still render with Elfsight's grey fill. Needs real class names from DevTools, or the dashboard
    • ⚠ The Es content folder is dead weight — the site is English-only and that folder carries the same English strings. A separate delete decision
    TEST AFTER DEPLOY, in this order. Rich Results Test on the live URL — it confirms the 7 nodes parse and shows whether Elfsight's Product block is still being injected, which is the one item that carries risk. PageSpeed Insights — the page tripled in content and gained a video facade. Search Console → URL Inspection → Request Indexing. Then view-source to confirm the verification tag renders, and click Verify.
    Standing instruction: every change made to this page is logged in legal-management-software-improvements.txt as a matter of course, without being asked, and mirrored as a Razor comment at the exact point of the edit in HomePageSkin.cshtml. Each pass appends its own section below the previous one: WHAT changed, the SOURCE or rule relied on, the KEYWORDS reinforced with their volume/KD data, and the updated open-items list carried forward. To refresh the table after the next round: re-parse both sides on the same day — «C-B» must keep meaning git 80ba76b no matter how many times the counter runs.