V1 → V2 Migration¶
V1 is the legacy 42-check Hormozi rubric (1.x). V2 is the Revenue Leak Framework (2.x). The change is not a renaming exercise; the scoring model, applicability, evidence states, and report structure changed.
Historical reports keep their V1 version. They are not silently rescored. A V2 re-audit gets a new run ID.
Why the score is not comparable¶
| V1 | V2 |
|---|---|
| 42 fixed checks, all scored | 40 checks with required/recommended/conditional applicability |
| Spanish 4 points hardcoded | Language is a configurable module |
| Financing, VSL, tiers, membership, paid priority, content freshness scored universally | Optional opportunity modules, not universal penalties |
| No N/A | N/A checks removed from the denominator; category weights normalized |
| Direct point sum | Applicability-aware category normalization |
| 7 categories: offer, conversion, proof, pricing, mobile, SEO, content | 7 categories: understand, contact, respond/book, trust, mobile/technical, findability, measurement |
| No explicit owner-data separation | Owner-data library never affects the score |
| One evidence state in practice | VERIFIED / STRONG SIGNAL / OWNER DATA REQUIRED / NOT APPLICABLE |
A V1 36 and a V2 68 describe the same kind of site on different rulers. Do not put them in the same trend line without a version note.
Migration matrix¶
| Current ID | Current check | V2 destination | Decision | Reason |
|---|---|---|---|---|
| A1 | Above-fold clarity | RL-UND-01 Service clarity; RL-UND-03 Outcome clarity |
Modify | Split "service" from "problem/outcome" so each can be judged specifically. |
| A2 | One primary offer | RL-UND-04 Primary action clarity |
Modify | Focus on the visitor's next step, not a single "offer" construct. |
| A3 | Specific offer with a price anchor | RL-UND-05 Offer specificity and price anchor |
Modify | Reduce from 3 to 2 points; full pricing transparency becomes an optional module. |
| A4 | Risk reversal near the CTA | RL-TRU-05 Guarantee and warranty specificity |
Keep/modify | Move to Trust, where risk reversal belongs. |
| A5 | Specific differentiation | RL-TRU-06 Identity and differentiation consistency |
Modify | Combine with owner/team identity and cross-page consistency. |
| A6 | Service area and local proof | RL-UND-02 Location and service-area clarity |
Keep/modify | Raise to 3 points; explicit eligibility. |
| A7 | Spanish-language access | RL-UND-08 Language access |
Conditional | Configurable preferred languages; N/A when not relevant. |
| B1 | Primary CTA above the fold | RL-UND-04 Primary action clarity |
Merge | CTA placement and clarity are one decision. |
| B2 | Click-to-call and text on mobile | RL-CON-01 Phone visible; RL-CON-02 Click-to-call; RL-CON-03 SMS |
Split | Phone visibility, tel: implementation, and SMS are different leaks. SMS is conditional. |
| B3 | Short form and real-time scheduler | RL-CON-04 Form exists; RL-CON-05 Form friction; RL-CON-06 Form usability; RL-CON-07 Scheduler; RL-RSP-05 Qualification context |
Split | One check was measuring four different problems. |
| B4 | Named lead magnet | Optional lead_magnet module |
Opportunity | Not universal; report it as an opportunity when relevant. |
| B5 | Video / VSL | Optional video module |
Opportunity | Valuable for some offers, irrelevant for many local trades. |
| B6 | Financing or payment path | Optional financing module |
Conditional/opportunity | High-ticket relevance only; no universal penalty. |
| B7 | Response-time promise | RL-RSP-01 Response and acknowledgement promise |
Modify | Separate the observable promise from actual response time (owner data). |
| B8 | Text/chat channel | RL-CON-03 SMS; RL-CON-09 Chat/callback |
Conditional | Split; both are optional and not universal. |
| C1 | Review volume and source | RL-TRU-01 Review volume, source, profile link |
Keep/modify | Raise to 4 points; external profile link matters. |
| C2 | Specific named testimonials | RL-TRU-02 Specific testimonials and case studies |
Keep | Still the proof-specificity check. |
| C3 | Real job photos / before-after | RL-TRU-03 Real project proof |
Keep | Add job context and captions. |
| C4 | License, insurance, certifications | RL-TRU-04 License, insurance, certifications |
Conditional | Relevant in most licensed trades, but configurable. |
| C5 | Owner/team face and story | RL-TRU-06 Identity and differentiation |
Merge | Identity and differentiation are one trust decision. |
| C6 | Specific warranty | RL-TRU-05 Guarantee and warranty specificity |
Merge | Same risk-reversal concept as A4. |
| D1 | Price transparency | RL-UND-05 (light anchor); optional pricing_transparency |
Reduce/opportunity | A full price list is not universally appropriate; a light anchor still helps. |
| D2 | Tiered packages or VIP | Optional tiered_packages |
Opportunity | A revenue architecture choice, not a website failure. |
| D3 | Maintenance/membership plan | Optional membership |
Opportunity | Continuity is valuable for recurring trades; not universal. |
| D4 | Priority/same-day/prepay | Optional priority_service |
Opportunity | A pricing strategy, not a universal conversion requirement. |
| D5 | Financing/fee disclosure | Optional financing |
Conditional/opportunity | Only relevant when financing is offered. |
| E1 | Mobile LCP | RL-MOB-01 Mobile LCP |
Keep | Same 4-point speed check, median of 3 runs. |
| E2 | Layout and tap targets | RL-MOB-02 Mobile layout; RL-MOB-03 Tap targets/persistent action |
Split | Layout usability and action reachability are different failures. |
| E3 | Sticky call/book bar | RL-MOB-03 Tap targets and persistent action |
Modify | A persistent action is useful; a specific sticky-bar design is not mandatory. |
| E4 | Navigation to booking/quote | RL-RSP-03 Booking steps and mobile usability |
Modify | Measure the actual path, not just the menu. |
| E5 | No blocking popup | RL-MOB-02 Mobile layout usability |
Merge | A blocking overlay is a mobile layout failure. |
| E6 | Form usability | RL-CON-06 Form usability |
Keep | Labels, input types, autocomplete, submit reachability. |
| F1 | Title and meta | RL-FND-01 Title, meta, H1 |
Merge | Title, meta, and H1 are one search-snippet decision. |
| F2 | H1 | RL-FND-01 Title, meta, H1 |
Merge | Same. |
| F3 | NAP and map | RL-FND-03 Local schema and NAP consistency |
Modify | Add schema consistency; map is optional evidence. |
| F4 | City/service-area pages | RL-FND-04 Service/location pages; RL-UND-07 Eligibility navigation |
Split | Local content depth and eligibility navigation are different. |
| F5 | Structured data | RL-FND-03 Local schema and NAP consistency |
Merge | LocalBusiness/Service schema is part of the entity signal. |
| F6 | Google Business Profile link | RL-TRU-01 Review volume/source/profile link |
Merge | The profile link belongs with review proof. |
| G1 | Service page answers four buying questions | RL-RSP-05 Qualification context; RL-RSP-06 Estimate workflow |
Modify | Separate routing context from estimate path. |
| G2 | FAQ with real objections | RL-RSP-05 Qualification context |
Merge | FAQ content supports routing and objection handling; not a separate universal score. |
| G3 | Advice content freshness | Optional content_freshness |
Opportunity | Not a universal revenue-leak penalty. |
| G4 | Next step at end of content | RL-CON-08 No conversion dead end |
Modify | Generalize from content pages to all high-intent pages. |
New V2 checks¶
| Check | Why it was added |
|---|---|
RL-UND-06 Service navigation |
High-intent visitors must reach a relevant service page quickly. |
RL-UND-07 Service-area eligibility navigation |
Out-of-area leads and eligibility confusion are a real leak. |
RL-UND-08 Language access |
Preserves the old Spanish insight without hardcoding one language. |
RL-CON-01 Phone visible and consistent |
The old rubric assumed a phone existed; consistency was not checked. |
RL-CON-05 Form friction |
Pulled out of a combined form/scheduler check. |
RL-CON-08 Conversion dead end |
Every high-intent page needs a next step. |
RL-CON-09 Chat/callback |
Optional alternate channel. |
RL-RSP-02 After-hours/emergency path |
Emergency trades need a visible path. |
RL-RSP-04 Confirmation expectations |
The visitor needs to know what happens after submission. |
RL-RSP-06 Estimate workflow |
Estimate requests are a major revenue path. |
RL-FND-02 Indexability |
Canonical, robots, and sitemap were not explicitly scored. |
RL-MOB-04 HTTPS/security |
A baseline cap-worthy failure. |
RL-MOB-05 Broken links/CTAs/JS errors |
Technical failures that block conversion. |
RL-MSR-01 Analytics |
Can the business measure anything? |
RL-MSR-02 Conversion/paid measurement |
Can the business attribute leads? |
Removed as universal scored checks¶
These remain useful as opportunity flags or owner-data prompts, but they no longer affect every site's 100-point score:
- VSL/video
- Full price transparency
- Tiered packages / VIP
- Membership / maintenance plan
- Paid priority / same-day
- Financing / fee disclosure
- Named lead magnet
- Content freshness
- A specific sticky-bar design (replaced by a persistent-action outcome)
- Universal Spanish access (replaced by configurable language access)
- Universal SMS/chat (replaced by conditional modules)
Report migration¶
V1 report:
- Executive summary
- Score card
- Top five fixes
- Detailed 42-row findings
- Copy pack
- 30/60/90 plan
- What we could not assess
- Evidence appendix
V2 report:
- One-sentence verdict
- The three biggest revenue leaks with evidence, why, fix, and confidence
- Customer journey summary
- Score breakdown
- Website findings (all checks)
- Revenue opportunities to investigate (owner data)
- Recommended next steps
- Evidence and limitations
The V2 report is simpler at the top and more rigorous underneath. The three biggest leaks are not necessarily the three lowest-scoring checks; they are ranked by likely economic impact and confidence.
Running the two versions¶
# V2 (default)
python3 .opencode/skills/home-service-website-audit/scripts/score.py \
--input audit.filled.json --out scores.json --strict
# V1 historical
python3 .opencode/skills/home-service-website-audit/scripts/score.py \
--input examples/legacy-v1-roofing/audit.filled.json \
--rubric .opencode/skills/home-service-website-audit/references/legacy/rubric-v1.1.3.json \
--out scores.json --strict
Do not overwrite a delivered V1 report with a V2 score. Create a new V2 run and explain the change.