injury-law/miami-workers-compensation-lawyer · Gallardo Law Firm · Audited 2026-08-13, 14 rounds through 2026-08-14 · En / article.cshtml + articlemetas.cshtml + FaqEntities.xml + ServiceEntities.xml
@* ROUND 2 — title rewritten for CTR. 76 chars -> 47. Old title preserved in the comment directly above it. *@
@* was: Miami Workers Compensation Lawyer | Work Injury Attorney | Gallardo Law Firm *@
<title>Miami Workers Comp Lawyer | Work Injury Attorney</title>
@* 150 chars. Opens on the searcher's state, names the three highest-intent problems, closes on the 30-day statutory deadline — a real reason to act, not a promise. *@
<meta name="description" content="Injured at work in Miami? Workers comp lawyers handling denied claims, unpaid benefits and treatment disputes. Free consultation. Report within 30 days." />
<link rel="canonical" href="https://gallardolawyers.com/injury-law/miami-workers-compensation-lawyer" />
@* SOCIAL IMAGE — repointed from the 375x211 thumbnail to the 903x530 asset, which ALREADY EXISTED on disk (139,775 bytes, verified before editing). *@
<meta property="og:image" content="https://gallardolawyers.com/themes/gallardo/images/services/903x530/miami-workers-compensation-lawyer.jpg" />
<meta property="og:image:width" content="903" />
<meta property="og:image:height" content="530" />
@* summary -> summary_large_image *@
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://gallardolawyers.com/themes/gallardo/images/services/903x530/miami-workers-compensation-lawyer.jpg" />
@* MAINTENANCE — description applied IDENTICALLY to og:description and twitter:description. title = og:title = twitter:title. IF ONE CHANGES, CHANGE ALL SIX. *@
Trade-off the firm must sign off on: «Gallardo Law Firm» was dropped from the <title> to fit the CTR hook in 47 characters. Google has shown site names separately since 2022, og:site_name still carries the brand, and brand queries already rank position 1 at 8.33% CTR — but it is a deliberate brand removal and it is reversible: the previous title and description are preserved verbatim in Razor comments. Open item (h).
What it bought, measured: «miami workers comp lawyer» went 0 → 6 occurrences across metas + content + FAQs. What it cost: «miami workers compensation lawyer» dropped one occurrence, and it is one of only two rows in the whole 201-row table that moved down.
| Keyword | GSC imp | Pos | Vol | KD | CPC | Was | Now | Δ | Note |
|---|---|---|---|---|---|---|---|---|---|
| miami workers comp lawyer | 2,501 | 8.11 | 260 | 12 | $46.73 | 0 | 6 | +6 | ⭐ #1 impression driver sitewide — was body-only, in NO meta field and NO heading |
| workers compensation lawyer | 1,390 | 9.60 | 74,000 | 26 | $36.86 | 10 | 14 | +4 | head term — biggest volume in the set |
| workers compensation attorney | 1,365 | 9.11 | 60,500 | 28 | $36.86 | 4 | 5 | +1 | H2 #6, H2 #9, FAQ answers |
| miami workers compensation lawyer | 1,084 | 9.04 | 320 | 17 | $24.56 | 9 | 8 | −1 | PRIMARY — title, canonical, URL, H2 #2/#14. The −1 is the Round 2 CTR pass |
| workers compensation lawyers | 898 | 9.22 | 33,100 | 29 | $36.86 | 2 | 6 | +4 | ⭐ biggest keyword on BOTH measures — deliberately reinforced in Rounds 9–11 |
| workers compensation attorneys | 734 | 9.35 | 27,100 | 30 | $36.86 | 1 | 5 | +4 | second biggest on both measures |
| best workers comp lawyers in miami florida | 540 | 12.52 | 390 | 16 | — | 0 | 0 | = | GAP — «best» cluster = 48 queries / 1,713 imp / 0 clicks. Rejected as a FAQ: self-laudatory, Rule 4-7 risk |
| work injury lawyer near me | 317 | 7.27 | 3,600 | 55 | $59.68 | 0 | 0 | = | GAP — near-me cluster is 63,480 US volume; page had zero «near me» copy |
| workers comp lawyer | 284 | 9.92 | 33,100 | 40 | $44.71 | 1 | 13 | +12 | largest single-row gain in the table |
| workers compensation lawyer near me | 207 | 10.36 | 12,100 | 11 | $31.86 | 0 | 2 | +2 | ⭐ THE standout: 12k volume at KD 11. Held to 2 instances on purpose — search phrasing, not prose |
| work injury attorney | 177 | 5.62 | 6,600 | 38 | $62.88 | 1 | 1 | = | META-ONLY — best average position on the page. Retained in the new title for exactly that reason |
| work accident lawyer | 137 | 7.46 | 5,400 | 26 | $77.71 | 1 | 1 | = | TOP CLICK-EARNING QUERY — 1 of the page's 7 clicks |
| spanish speaking workers compensation attorney | 138 | 46.62 | 70 | 9 | — | 0 | 1 | +1 | English query about bilingual service — never stated in EN copy. Was ranking position 46 |
| workers compensation attorney coral gables | 139 | 16.66 | 40 | 4 | $24.56 | 0 | 0 | = | Coral Gables cluster = 33 queries / 2,324 imp / 0 clicks — biggest untapped geo |
| hialeah workers compensation lawyer | 106 | 14.70 | 90 | 4 | $36.86 | 0 | 0 | = | KD 4 at $36.86 CPC — easiest high-value geo win on the board |
| miami denied workers compensation claim attorneys | 89 | 20.19 | 0 | — | — | 0 | 1 | +1 | CANNIBAL — the sibling page owns this. Handled with a handoff link, not with copy |
| workers compensation doctor miami | 69 | 21.26 | 70 | 1 | — | 0 | 0 | = | «workers comp doctor + neighbourhood» = 91 queries / 2,147 imp / 0 clicks — answered in Round 6 as WHO IS AUTHORISED |
| how much does a workers comp lawyer cost | 0 | — | 320 | 0 | $10.62 | 0 | 0 | = | KD 0, the lowest in the dataset. Page now answers it — but as «how much a workers comp lawyer costs» (near-match, item m) |
| workers comp lawyer free consultation | 7 | 8.29 | 320 | 23 | $30.53 | 0 | 0 | = | 14.29% CTR — the page's best-converting query band |
| workers' compensation (root term) | — | — | — | — | — | 65 | 122 | +57 | density across headings, body and FAQs |
| workers comp mediation / Judge of Compensation Claims | 0 | — | 110 | 0 | — | 0 | 27 | +27 | KD 0 and unowned by any page on the site. Round 6's dispute-process section |
| Petition for Benefits | — | — | 20 | — | — | 1 | 9 | +8 | the correct answer to «can I appeal my denial» — Round 9 |
| authorized doctor / unauthorized doctor | — | — | — | — | — | 2 | 8 | +6 | Round 6's H2 #16, built on 2,147 impressions of measured demand |
| workers compensation claim | — | — | 1,000 | 53 | $10.35 | 8 | 19 | +11 | head term for the claim-steps section |
| impairment rating | — | — | — | — | — | 2 | 9 | +7 | statutory benefit mechanics, added Round 1 and extended Round 10 |
| injured worker | — | — | — | — | — | 4 | 11 | +7 | body throughout |
| workers compensation settlement calculator | 0 | — | 480 | 10 | $3.07 | 0 | 2 | +2 | answered HONESTLY — by explaining why no calculator can price a claim |
| miami workers' compensation lawyer | 193 | 7.97 | — | — | — | 9 | 8 | −1 | apostrophe variant — same single cause as row 4 |
| workers compensation attorney niceville fl | 268 | 32.88 | — | — | — | 0 | 0 | = | NOISE — Niceville + Navarre ≈ 1,400 impressions from panhandle cities. No business value, unfixable |
articlemetas.cshtml <title> and every content="" value + article.cshtml visible copy + the 10 EN FAQ question/answer pairs. Razor comments, XML comments and the three JSON-LD blocks are EXCLUDED, so schema alternateName values are not double-counted as body density. «Was» is read from git show HEAD: on the same files with the identical matcher. Counts are substring counts, so a longer phrase also increments its shorter components — the rows are not mutually exclusive and must not be summed.| Cluster | GSC imp | GSC clk | SEM volume | KD range | Read |
|---|---|---|---|---|---|
| Near-me | 2,748 | 2 | 63,480 | 11–55 | Huge market; the page had zero «near me» copy |
| Head commercial | ~9,000 | 2 | 328,480 | 17–40 | Ranks position 8–10 and converts nothing |
| «Best / top» | 1,713 | 0 | 170 | 8–27 | Volume is small; the GSC impressions overstate it |
| Coral Gables | 2,324 | 0 | 180 | 10–16 | Low national volume, still 0 clicks at position 15 |
| Workers-comp doctor | 2,147 | 0 | 120 | 0–1 | Wrong service — the firm does not provide doctors |
| Hialeah | 797 | 0 | 50 | 3–4 | Thin volume, trivially easy KD |
| Miami Beach | 631 | 0 | 90 | 6 | Thin volume |
| Fort Lauderdale | 373 | 0 | 600 | 9–33 | Real volume — deserves its own page, not this one |
| Informational H2s | ~5 | 0 | 10,050 | 0–63 | See the correction below |
| Free consultation | 22 | 1 | 330 | 23 | Small volume, best CTR band on the page |
thumbnailUrl held the literal placeholder «VIDEO_ID». It is a REQUIRED VideoObject property, so the placeholder was invalidating video rich-result eligibility FIXEDpriceRange from the Service JSON-LD. Open item (a): the fee wording is deliberately non-committal about this firm's own arrangement and now appears in TWO places — #heading-15 and FAQ 9. Both need Gallardo's actual terms.
ServicePageSkin.cshtml renders Model.FAQs.Take(10), and .Take(10) does not sort — it takes XML document order. A valuable FAQ appended past the tenth entry never renders and nobody notices. The roster is now FULL at 10: any future FAQ must REPLACE an entry, not extend the list.
#wc-rate speakable selector, so 66 2/3% is now reinforced in three places: body copy, speakable node, FAQ.
A rationale that no longer holds, corrected in the record: Round 3 partly justified the 10-slot roster on FAQPage rich results. Google deprecated FAQ rich results on 7 May 2026. THAT RATIONALE IS DEAD. The roster is still worth keeping at 10, but only for the reasons that survive: the FAQ text is part of the indexable corpus, it carries keywords the body cannot carry naturally, and Q&A is the format generative engines quote most readily. The structured data itself is now maintenance, not benefit — but do not remove it.
<FaqEntity … language="En">. The real markup is <FAQEntity … language="en"> — capital FAQ, lowercase «en» — and the question and answer are ATTRIBUTES (q="" / a=""), not child elements. Every filter missed, the FAQ corpus came back empty, and no error was raised because an empty string concatenates silently.
It mattered because the corpus definition was set by explicit instruction («metas + content + FAQs»), so the figures were wrong against this report's own standard. Every corrected figure moved UP, none moved down — FAQs only ever add occurrences — so no Round 8 conclusion reversed. CHECK ADDED: the extractor now prints the FAQ count it found (expected: 10). A silent zero cannot recur unnoticed. NOT YET DONE: the main table's Was/Now columns from Rounds 5–6 were built with other scripts and have not been re-verified against this bug — open item (s).
PartialServicesRelated.cshtml renders these as live anchors at the foot of the page, so the last thing a crawler read on this workers' comp page was six links into car-accident territory. Meanwhile five workers-comp siblings share this page's own category and NONE were linked — including the denied-claims page, which takes 89 impressions off this page as a competitor while receiving no link from it. All destinations verified in ServiceEntities.xml AND sitemap.xml before linking. SCOPING NOTE: four other pages share this identical block, so the replacement was scoped to this ServiceEntity only.
active="true" AND against sitemap.xml: 10/10 services + 1/1 blog post. No link was written from memory of a URL. One tooling note: linkcheck.py flags the blog destination as broken — FALSE POSITIVE, it only reads ServiceEntities.xml. Verified by hand.
targeredkeyword. Verified inert: BlogPostPageSkin.cshtml renders <h1>@Model.Title</h1>, so on a blog post the attribute never reaches the rendered page. This overturned the audit's own first recommendation, which had ranked those four edits as the cheapest big win. Record-keeping only OPEN (x3), LOW PRIORITYprovider on the Service references the firm by @id, so the Service, the WebPage, the BreadcrumbList and the skin's own LegalService all resolve to a single entity rather than four disconnected islands. All 3 parse as valid JSON; all 3 speakable selectors resolve against ids that exist in the markup.
href, so any audit that only scans href attributes skips it. Verified separatelydateModified — it records when a HUMAN last verified the legal content against Chapter 440, not when the file was touched. Deliberately NOT @Model.GetLastModifiedDateServicePageSkin.cshtmlo1iTXN1Dbq4, taken from embedUrl on the same node rather than from memory.workers-comp, the URL is /injury-law/, and all ten FAQ entries are tagged Category id injury-law. Three names for one thing.targeredkeyword — ZERO share a value with any other page. The user caught it by opening the pages in a browser and seeing six different H1s.
THE BUG: the script located each entity with find('id="<slug>"') and walked backwards with rfind('<ServiceEntity', 0, i). But the FIRST occurrence of those slugs in the file is not each page's own entity — it is inside the HUB's <ServicesRelated> block, the cross-reference list added in Round 2 by this very workstream. So rfind walked back to the hub's own tag and returned the hub's keyword for every one of them. The five «duplicates» were exactly the five siblings put into ServicesRelated in Round 2. The pattern was not a finding. It was the shape of my own edit reflected back at me — which is precisely why it looked so clean and so alarming. A single ET.fromstring parse, one command, would have caught it. A related regex bug in the same round required targeredkeyword="…" with no spaces while the XML is written with spaces around the equals sign, so every service page matched as empty and the truth reported was the exact opposite of the fact.
can-workers-return-to-work-after-injury was found stating flatly: «An employer can't fire you. It's simply illegal». Florida is an at-will state — s. 440.205 prohibits discharge IN RETALIATION FOR a claim; it does not make an injured worker unfireable for other lawful reasons. The same page also garbles the TPD threshold.
This page states both rules correctly, in H2 #10 and H2 #5. The user instructed «do not touch the sibling page», so it was NOT fixed and will not be as part of this workstream. Recorded here so the finding is not lost if that page is revisited by someone else. CLOSED — user declined the fix.
active="true" in ServiceEntities.xml + sitemap, 1 blog post in BlogPostEntities.xml + sitemap<li> pairs · 24 <div> pairs · 13 <h3> pairs<table> · 10 <tr> · 4 <th> · 36 <td> · every row exactly 4 cells · wrapped in overflow-x:auto so it scrolls inside its own container on mobilelinkcheck.py reports the blog destination as broken — false positive, it reads only ServiceEntities.xml. Do not «fix» the link<img> elements across 6,858 words. The new table covers part of what images were wanted for — visual break, scannability — but there are still no images (item r)summary_large_image · title 76 → 47 chars · review stamp added · broken-link audit run · cannibalisation tested in both directions · FAQ roster 8 → 10 of 10. Legal accuracy was verified in Round 1 against Chapter 440 and the Florida DFS: no legal errors were found — the 30-day rule, the 2-year deadline with its 1-year tolling, the one-change-of-physician right, exclusive remedy, the 104-week cap, the TPD 80% threshold and the MMI sequence were all already correct.
title = og:title = twitter:titlepriceRange anywherehow-to-file-a-workers-comp-claim-in-florida promises steps in its title, delivers none in 804 words, and declares «Miami workers comp lawyer» as its target — a directly declared conflict with this page that costs nothing to fixmiami-workers-compensation-lawyer-improvements.txt as a matter of course, without being asked. Each round gets its own CHANGE LOG section appended below the previous one, in the established format — numbered edits continuing the existing sequence, with WHAT changed, the SOURCE or rule relied on, the KEYWORDS reinforced with their volume/KD data, the validation run, and the updated open-items list carried forward.