Cardinale & DelVecchio Law Firm
Taking a two-office Central New York law firm off Duda and rebuilding it as 61 hand-built pages where every statute, fine, point value and deadline names its source and the date it was checked, two 2026 law changes were caught that most competing sites still describe wrongly, and not a single attorney credential was invented to fill a gap.
The site is finished and has not launched. So this is a build case study, not a results case study. There are no rankings, no traffic and no lead numbers on this page, because there is no live site to have produced them.
What is here is measured: page counts, word counts, schema coverage, contrast ratios, duplicate-content scores and link-graph depth, all read out of the built site. When it goes live a Search Console baseline gets captured on day one, and the results chapter is written against that. That is the honest order.
Twenty-six years of local practice, on thirteen pages.
The firm has practiced in the same two Central New York communities since 2000, holds 361 Google reviews across its two offices, and appears in courts across two counties. The website carried almost none of that.
- Thirteen content pages for six practice areas and two counties One page each for personal injury, criminal defense, real estate, bankruptcy and uncontested divorce. Nothing underneath any of them.
- Not one page that was both a service and a city Nothing targeting "Syracuse traffic ticket lawyer" or "Cortland DWI attorney" — the searches that actually produce calls. A page that does not exist cannot rank, and no amount of on-page work fixes that.
- Legal figures with no source and no date Point values, fines and deadlines stated flatly. New York changes these. Two of them changed in 2026 alone.
- Attorney bios with no credentials Two partners, no bar admission years, no law schools, no courts, on a site in the category where Google weighs author credentials most heavily of all.
- The platform owned the site Duda: templated, subscription-billed, and the content locked inside somebody else's editor rather than in version control.
- No court information at all Onondaga County has twenty-six town and village justice courts and a city court. Cortland County has fifteen plus its own city and county courts. A ticket goes to whichever covers the spot it was written. The site said nothing about any of them.
Three layers, because people search three different ways.
One page trying to rank for everything ranks for nothing. The rebuild splits the work by how the search is actually typed.
- Practice hubs, for someone who knows what they need Six of them. "Traffic ticket lawyer." Each links down to its sub-issues and out to its city pages.
- Sub-issue pages, for someone with a specific problem Twenty. "How many points is 20 over." Each names the statute, the point value or the deadline, because that specificity is what makes a page worth finding rather than worth skimming.
- Service × city, for how people actually search Ten. "Cortland DWI lawyer." These are the pages that produce calls, and they are why the site is organized around Onondaga and Cortland separately rather than as one blurred "Central New York."
- Court reference, the thing no competitor had written Every court in both counties, with addresses, verified against the New York State Unified Court System. Five of Cortland's fifteen town courts sit somewhere other than their namesake town, and two pairs share a building. Turning up at the wrong one counts as failing to appear.
Every legal figure names its source and the date it was checked.
This is the whole method, and it is the reason the build took as long as it did. It is also the single largest difference between this site and the firms it competes with.
May 2026 — auto injury. New York deleted a category from the serious injury threshold, the one usually called the 90/180 rule, so a route to compensation that existed before is simply gone. Separately, comparative fault changed for motor vehicle claims: being mostly at fault can now end a claim rather than reduce it. Which version applies turns on the filing date, not the crash date. That is the detail that decides cases and the one most summaries omit.
February 16, 2026 — DMV. Point values changed and one of the two lookback windows moved from 18 months to 24. Work zone violations now carry a flat 8 points whatever the speed.
A great deal of what is published about both, including on competing law firm sites, still describes the previous versions.
- A stale government page nearly propagated a wrong figure The New York courts "What's New" page still in wide circulation stops at 2024. The current figures live at a different URL. The difference was caught, and a note now sits in the source warning the next person not to "correct" the right numbers against the stale page.
- An unverifiable address was left blank rather than guessed Cortland City Court could not be confirmed from an official page during the first pass, so it shipped with a null address and an explicit instruction not to fill it in from a directory site. It was verified later from the court system's own page, 25 Court Street, and only then published.
- Statutes cited by section, not paraphrased VTL § 1180 for speeding, VTL § 511 for aggravated unlicensed operation, DRL § 236(B)(6) for maintenance, Insurance Law § 5102(d) for the serious injury threshold, CPLR § 1411 for comparative fault, Majauskas v Majauskas for pension division.
- The reader is told to check the date The terms page says plainly that law moves, names the two 2026 changes as examples, and tells readers to check the date next to any figure — including ours.
The empty spaces are the argument.
On a law firm site, what a build declines to fabricate matters more than what it produces. Each of these was a deliberate decision, and each one costs something in the short term.
- No invented attorney credentials Both bios are still short, because bar admission years, law schools and court admissions have not been supplied yet. The data layer is built so a missing field renders nothing. Not "TBD", not an empty row. The page is simply shorter until the fact exists. A fabricated bar admission on a law firm site is a different category of problem from a typo.
- No bylines on pages nobody has read Five resource articles carry a named attorney byline and an author node resolving to his Person schema. The other 56 pages carry none. A byline asserts that a named attorney read and stands behind the page; adding "Reviewed by" to 56 pages nobody reviewed would be inventing a review. One page shipped mid-build with an unearned "admitted in New York" credential — it was caught, removed, and a build check now makes it impossible to repeat.
- No Review or AggregateRating schema Google no longer surfaces rich results for self-serving rating markup, and misusing it risks a manual action. All 361 reviews are published as written, and none of them are marked up as stars we would not get.
- Client reviews reproduced verbatim, typos included Not tidied, not paraphrased, not "improved." Editing a client's review is not the firm's call to make.
- No "best," no "expert," no "specialist," no promised outcomes New York Rule 7.1 prohibits them without certification. Every footer carries the Attorney Advertising label and "prior results do not guarantee a similar outcome."
- No Cicero service pages, against the obvious temptation Cicero is where the main office sits, so a full set of Cicero service pages looks like free coverage. It was refused: Cicero is in Onondaga County and shares its courts with Syracuse, so those pages would have been near-duplicates of the Syracuse ones. Doorway pages, precisely what the 2026 spam updates target. Cortland gets its own set because it is a genuinely separate court system.
- No accessibility overlay The widget that promises instant compliance. Screen reader users and the National Federation of the Blind are openly critical of them. The underlying pages were built properly instead, which is slower and is the thing that actually works.
- No claim of full WCAG conformance The accessibility statement names the standard, says what was measured, and is specific about what may fall short. A statement that overclaims is a written admission rather than a protection.
Built to be the source an answer engine quotes.
People ask ChatGPT, Gemini, Perplexity and Google's AI Overviews "how many points is a speeding ticket in New York?", and those systems answer from sites they can parse. Legal questions are among the most-asked.
That 302-of-302 figure is the one worth pausing on. An answer engine lifts a tight, self-contained answer sitting under a question-shaped heading. Every single answer on this site is written to that shape, and a build check fails the site if one drifts outside the band.
Every address, phone number, opening hour and geo-coordinate on the site is generated from a single data file. Sixty-one pages, two addresses, two phone numbers, one opening-hours block — verified identical across all of them. NAP consistency is the foundation of Local Pack ranking, and the usual failure is a stale address on page forty that nobody re-reads. Here it cannot drift, because there is only one copy.
Three custom tools, run on every build.
Human review misses things at sixty-one pages. These were written for this project, and each one exists because of a specific mistake that got caught once and must never recur.
- houselint · 380 lines Fails the build on: visible placeholder text, an attorney page with no credentials, a redirect rule that shadows a real page, British spellings, em dash density above five per thousand words, day-month-year dates, FAQ answers outside the 40–60 band, and NY Rule 7.1 claim words. It currently reports two errors — both attorney bios, both waiting on the firm.
- csslint · 131 lines Layout and contrast regressions.
- inventory · 141 lines Generates the page manifest from the built site so the client-facing handover page can never misdescribe what it is handing over.
Five-word shingle overlap, flagged at 10%. It caught real problems that reading would not have: a resource article 23.2% overlapping the practice page it was meant to support, and a Cortland page 12.2% overlapping its Syracuse counterpart. Both were rewritten to 1.1% and 4.7%.
It also caught two office pages at 16.98% — which had been that way from the start, and which a first fix accidentally pushed to 18.71% before the measurement exposed it. Separating shared components from editorial prose showed the real figure was 13.0%, against 0.26% for two comparable pages. Rewritten to 6.95%.
A full cannibalization audit found zero page pairs competing on the same head term with the same geographic scope.
Audited across all sixty-one pages, not a sample.
- Contrast measured from the real palette, not estimated Body 15.56:1, muted text 6.39:1, links 5.88:1, navy panels 8.9–17.2:1, form borders 3.73:1. All pass AA.
- A skip link that only worked with JavaScript, fixed It used inline focus handlers, so a keyboard user got nothing visible if scripts failed. Rewritten CSS-only. Publishing an accessibility statement saying "there is a skip link" while the skip link was that fragile was not acceptable.
- iOS scroll lock on the mobile menu
iOS Safari ignores
overflow:hidden, so the header scrolled away with the menu open, taking the close button with it. - Wide tables restack as cards on phones Twenty-one tables of fines, points and deadlines. A scroll wrapper was not enough; on a phone they now stack rather than being squeezed.
- A false positive worth naming
An automated checker flagged 45 unlabeled form controls. All 45
were the spam honeypot, which is wrapped in a label inside
aria-hidden. A checker looking only forlabel[for]misses a wrapping label. Not a defect, and worth verifying rather than "fixing."
Before → after, line by line.
- Platform
-
Duda subscription→Astro + Netlify, in Git
Off a rented editor and onto a version-controlled site the firm owns outright.
- Pages
-
13→61
Each with a unique title, description and self-referencing canonical.
- Service × city
-
None→10 pages
The pages that rank for "[city] [service] lawyer." Previously the firm had nothing that was both.
- Legal sourcing
-
Undated claims→Statute + date on every figure
Including two 2026 changes most competing sites still describe incorrectly.
- Court information
-
None→Both counties, fully listed
Verified against the state court system, including which courts sit somewhere other than their namesake town.
- Structured data
-
Minimal→Full graph, generated
Organization, per-office LegalService, Person per partner, FAQPage, BreadcrumbList, Article — from one data file.
- Answered questions
-
Few→302, all in band
Every one written at 40–60 words for AI answer extraction, enforced by a build check.
- Attorney credentials
-
None→Scaffolded, awaiting the firm
Built so a missing field renders nothing rather than a placeholder — and so the build fails until they are supplied.
- Policy pages
-
"Needs wording from counsel"→Written, audited
Privacy, terms and accessibility. The privacy policy was written against an audit of what the site actually does, not from a template.
- Old URLs
-
Would 404→21 redirect rules
Every URL the old site ranked for points at its replacement, so twenty-six years of history follows the firm across.
- Measurement
-
None→GA4, gated and ready
Configured with click-to-call and form events, switched on at launch — and the privacy policy already describes it honestly.
Sixty-one pages, grouped.
Generated from the built site rather than typed, so the list cannot drift from what actually shipped.
- Practice hubs · 6Traffic tickets · Personal injury · Criminal defense · Uncontested divorce · Real estate · Bankruptcy
- Traffic ticket sub-issues · 7Points & insurance · Speeding · Suspended license (VTL § 511) · Out-of-state drivers · Reckless driving · CDL & commercial drivers · Cell phone & texting
- Personal injury sub-issues · 8Car accidents · No-fault & the serious injury threshold · Slip and fall · Construction · Motorcycle · Dog bites · Workers' compensation · Boating
- Uncontested divorce sub-issues · 4Cost & timeline · Property & debt · Spousal maintenance · Children & support — each carrying the March 2026 statutory caps
- Criminal defense sub-issues · 1DWI & DWAI. Charge-type pages were deliberately not written until the firm confirms scope — pages advertising work a firm does not take are worse than no pages.
- Syracuse & Onondaga County · 6County hub plus traffic tickets, personal injury, criminal defense, DWI and uncontested divorce
- Cortland County · 6County hub plus traffic tickets, personal injury, uncontested divorce, criminal defense and DWI — a separate court system, not a smaller Onondaga
- Cicero · 1The town the main office is in, and the Local Pack anchor for it. No service children, on purpose.
- Court reference · 2Every court in Onondaga and Cortland counties, with addresses
- Resources · 6A hub and five articles, each carrying a named
attorney byline and an Article node with a dated
dateModified - Firm & trust · 10About · Attorneys · two bios · Practice areas · Offices · two office pages · Reviews (all 361, verbatim) · Contact
- Policy · 3Privacy · Terms · Accessibility
Finished, and honest about what finished means.
- Two build errors remain, and both are the client's to clear The attorney bios. Bar admission years, law schools and courts have not been supplied, and the build is configured to fail until they are. That is deliberate: the alternative is a site that quietly ships without them.
- A handover page was built for the firm
Every page listed and clickable, what is needed from them, and what
needs their legal review — served
noindex, excluded from the sitemap, disallowed in robots.txt and linked from nowhere. Publishing an internal to-do list on a law firm's public domain would be its own kind of mistake. - The measurement chapter has not been written Nothing on this page is a ranking result. At launch, a Search Console baseline is captured — indexed pages, impressions by query, the duplicate-canonical bucket. Results are then reported against it afterwards. That is the honest order, and it is the only one that produces a number worth showing.
No results, because there are none yet. The site has not launched. Every figure here describes the artifact: pages, words, schema nodes, contrast ratios and overlap scores. Not its performance.
The architecture is a bet, not a guarantee. Service × city pages, dated sourcing and atomic FAQ answers are what the current evidence supports for a local legal practice. Google changes. The measurement will say whether it worked.
The bios being unfinished is a real cost, not a footnote. They are the weakest pages on the site and the E-E-A-T anchor for the other fifty-nine. Refusing to invent credentials is the right call and it is not a free one.
Two counties, one small firm. This is a two-partner practice in Central New York, not a national brand. The scale of anything that follows will match that.
Most of this work was deciding what not to publish.
Any agency can produce sixty-one pages. The part that matters on a site where being wrong has consequences is the discipline to leave a field blank, date every claim, and measure your own work before reporting it.