Why week 1 is tracking, not just pages
GSC and GA4 stay the owned truth. Semrush is the workbench. Connecting them is how Semrush stops guessing. A form fill is a lead. A sale is Dispatch tagged Roof Hub.
Guardrails. Do not skip.
Day 0. Access before you touch a page
Empty boxes are the first Slack to Norm. Do not start content until Google and Semrush are connected. Checks save on this browser.
Semrush
Site and client systems
Block A. Connect GA4 and Search Console to Semrush
Semrush does not inherit one connection across every tool. Same Google account each time. Same GA4 property. Same GSC property. Official map: Semrush KB 857.
| System | Minimum to connect | What we want |
|---|---|---|
| GA4 | Viewer | Editor, so you can mark key events |
| Search Console | Owner or Full user | Full user on the live property. Restricted fails Backlink Audit and others. |
A1. Project Dashboard
- Projects → roofhubohio.com.
- Gear / Integrations, or dashboard settings → Google account settings.
- Connect Google Analytics 4. Account → property Roof Maxx of Cleveland → Web data stream for roofhubohio.com.
- Connect Search Console. The property that already has 172 YTD clicks.
- Grant read-only. Semrush should not get write access to Google.
- Wait 15–30 minutes. Refresh.
Pass: widgets show GSC clicks in the same ballpark as Search Console, not “4 visits.”
A2. Organic Traffic Insights. Do this. This is the join.
This puts GSC queries and landing pages next to GA4 behavior. Without it you are flying on Semrush keyword guesses.
- Organic Traffic Insights → folder for roofhubohio.com.
- Connect GA. Same property / stream. Connect GSC. Same property.
- Database United States. Device: start with Mobile (87 of 172 clicks). Add Desktop if the UI allows both.
- Launch / update the campaign.
Pass: you can see real queries like roof maxx of cleveland, roof rejuvenation near me, roof repair with impressions and no clicks.
A3. Position Tracking
- Edit the existing campaign. Do not start a second overlapping one.
- Location: Cleveland, Ohio, United States. Device: Mobile primary. Add Desktop only if the plan allows a second campaign.
- Local pack on. Business name: Roof Maxx of Cleveland.
- Connect GA4 and GSC inside this campaign. Separate connect.
- Seed keywords after GSC import. Drop junk geo from the Aug 7 export (El Paso, Lake Orion, Columbus).
Core brand / dealer
Intercept. Honest, inspection-first pages.
City modifiers should match live /areas-we-serve/ slugs (Cleveland, Akron, Canton, North Canton,
Medina, Mentor, Westlake, Brunswick). Competitors: roofmaxx.com, getroofmaxx.com, plus 2–3 Cleveland
replacement companies that actually rank here. Not random Semrush “competitors” in other states.
A4. Site Audit. Schedule weekly.
- Connect Google Analytics in Site Audit settings.
- Crawl sitemap + website. Confirm the live sitemap in robots.txt. Allow JS rendering if the theme needs it.
- Schedule Monday morning. Recrawl after you connect GA.
| Known 7 Aug crawl | Count | Do in week 1–2 |
|---|---|---|
| Structured data errors | 79 | Fix LocalBusiness / FAQ / Review JSON-LD. Do not invent ratings. |
| Missing meta description | 22 | Unique copy. Area pages first. |
| Broken internal links / 4xx | 3 / 1 | Fix or 301. |
| Title too long / missing h1 | 3 / 3 | Trim. One h1 per template. |
| HTTP links on HTTPS | 78 | Force https in links and canonical. |
| Low text-to-HTML / unminified JS-CSS | 73 / 468 | Don’t boil the ocean. Fix templates you touch. Cache plugin if missing. |
A5. On Page SEO Checker
Connect GA4 and GSC. Run on /, /get-a-free-quote/, /contact-us/,
/how-it-works/, area pages, and
/how-much-does-roof-replacement-cost-in-northeast-ohio/ (already around 15 for Akron replacement
cost). Use it for week 2 cleanup. Do not paste Semrush’s suggested sentences. Original only.
A6. Backlink Audit
Connect GSC (Owner / Full user). Start the campaign. Toxic list later. Week 1 is who already links, plus five real local asks you can actually send.
A7. My Reports. Your monthly machine.
Connect GA4 and GSC inside My Reports. One template named Roof Hub monthly.
- GSC clicks, impressions, CTR, avg position
- GA4 users, organic sessions, engaged sessions
- Key events:
generate_lead,phone_click, quote thank-you - Position Tracking visibility (Cleveland)
- Site Audit score + error count
- Top landing pages and top queries
Semrush traffic widgets stay off this template, or sit in a footnote labeled estimate. Client numbers come from GSC, GA4, GBP Insights, and Dispatch.
A8. Connection proof. Save this.
Block B. Tracking so we get credit
A homeowner who finds Roof Hub should show up in four places. Search Console. GA4. Dispatch source Roof Hub. Your monthly report.
B1. Inventory what is on the site today
Tag Assistant / GTM preview / GA4 DebugView. GA4 already shows 16 key events YTD (7 on quote, 5 on contact) while Generate leads is 0 / 0. Something fires. Qualified lead is not mapped. Do not add a second GA4 property. Fix the one we have.
B2. Events. Names stay stable. Mark as key events.
| Event | Fires when | Params |
|---|---|---|
generate_lead |
Quote form success and contact form success | form_id, page_location, lead_type = quote or contact |
phone_click |
Click on any tel to 330-500-9505 | page_location |
email_click |
Mailto to the shop | page_location |
quote_start |
First interaction on the quote form. Optional. | page_location |
Until we have a sold-job webhook, do not invent a “converted” key event from a form fill. Lead =
generate_lead or phone_click. Sale = Dispatch source Roof Hub.
B3. Form success has to be a real hit
| What you see on the test quote | What you do |
|---|---|
| Separate thank-you URL | GA4 event on that page plus generate_lead. |
| AJAX. Stay on page. Thanks message. | dataLayer push on success. GTM trigger. Do not fire on button click. |
Redirect with ?sent=1 |
Trigger on that query. |
| Posts to a third party | Catch the success callback. If you cannot, we are blind. Flag Norm. |
Confirmation email to Jon and Norm on every quote so you can pair timestamp with GA4.
B4. Phone credit. Do not change the public number.
B5. Stop Direct from eating our work
GA4 YTD is mostly Direct / (none) (~720–764 vs organic ~158–285). Snapshot cities were Singapore 254, then Cleveland 15. Singapore never goes in a client sentence.
B6. Search Console hygiene
B7. Dispatch is the sale
B8. Day-0 scoreboard. Write numbers before you change anything.
| Source | Window | Metric |
|---|---|---|
| GSC | Last 28 days | Clicks / impressions / CTR, and clicks on home vs area vs quote |
| GA4 | Last 28 days | Organic sessions, generate_lead (0 until you fix it), key events |
| GBP Insights | Last 28 days | Calls / website clicks / search views |
| Dispatch | July 2026 | Roof Hub 3 sales / $26,251. Already on file. |
| Semrush PT | Day you connect | Visibility + seed ranks |
Block C. Production by week
Local listing work runs every week. Reviews, photos, posts, the listing NAP. That is the old $1,200. Do not drop it.
Wire the machine + first pages
Done when you trust Roof Hub numbers in GA4, Semrush shows GSC not guesses, first pages live, one test quote in the log.
Pages people already use
Done when main templates make it easy to call or quote on a phone. Second page set live.
Intercept “I need a new roof”
Legal intercept. Organic pages. Not ads. Every path still says full inspection.
Done when a replacement searcher has a real Roof Hub place to land. Inspection language is on the page.
Ship again + 30-day review
After day 30. Month to month.
This is the rhythm so it does not slide back to light Local and a blog post.
| Every week | Tool | Output |
|---|---|---|
| Google listing | GBP | Reviews, photos, posts, hours, website URL |
| Who is beating us | PT + Keyword Gap vs roofmaxx.com + GSC | Pick next URL |
| New or improved pages | WP + GSC URL Inspection | At least 2 URLs/week unless blocked on copy approval |
| On-page cleanup | On Page SEO Checker + your judgment | Titles, H1, quote CTA |
| Site fixes | Site Audit Monday crawl | Batch of errors, recrawl |
| Get recommended | Backlink Audit + outreach log | Asks sent / links won |
| Easy quote | Live site on a phone | CTA still obvious |
| Numbers | GA4 + GSC + Dispatch | Short note to Norm |
Monthly: run Roof Hub monthly. Export GSC + GA4 + GBP into the baseline folder. Compare Dispatch Roof Hub sales to GA4 leads. Call out the gap. Never hide it. Client slides use GSC and your SERP checks, not Semrush “traffic $.”
While you write
- DBA Roof Maxx of Cleveland. Phone 330-500-9505. Quote /get-a-free-quote/.
- Competitor in search is roofmaxx.com. Do not attack other dealers in copy.
- Area pages are unique. Canton / Akron / Cleveland are not one paragraph with the city name swapped.
- Semrush SEO ideas are prompts. If it reads like a franchise brochure, rewrite.
- No prices. “Up to 80% less” is allowed with up to.