Three Pages, One Query, Rotating Rankings
Copperline is a residential HVAC company serving a metro area of 1.1 million people. Three URLs compete for the query 'AC repair [city]': /ac-repair (position 9), /services/air-conditioning-repair (position 12), and a 2021 blog post titled '5 Signs Your AC Needs Repair' (position 14). Search Console shows the URL ranking for that query rotating from week to week, and average position has slipped from 6 to 11 over four months while total impressions for the query have stayed flat. The homepage title tag also contains 'AC Repair [City]'. All four pages have different H1s, but the first 150 words of the two service pages are near-identical. The marketing manager is a generalist with no developer support and a HubSpot CMS. Paid search bids on the same term at $9.40 per click. Leadership wants 'the blog post fixed' because it has the most external links.
1. Explain why the ranking URL rotates and average position falls while impressions stay flat, and list what you would check before changing anything.
Read the worked answer
Flat impressions mean demand and eligibility did not change - Google is still showing a Copperline page. What changes is which page. When several URLs match one query with near-identical content, Google picks a winner per crawl and per query context; small differences in links, freshness, and CTR cause the pick to flip. Every flip splits link equity, CTR history, and engagement across URLs, so none accumulates enough signal to climb - hence the slide from 6 to 11 while the total impression pool is unchanged. The homepage competing makes it worse: it is a broad page, so when Google picks it the searcher gets a worse answer and CTR drops, which feeds the slide.
Checks, in order:
- GSC Performance → filter exactly to the query → Pages tab, six months. Confirm which URLs alternate and whether the homepage appears.
- Internal anchor text: does every in-body 'AC repair' link point to the same URL? Inconsistent anchors are the most common root cause.
- Canonicals: each page self-canonical, none pointing at a sibling.
- Title tags and H1s, plus the near-duplicate first 150 words on the service pages.
- Sitemap inclusion and links from the blog post.
- Whether the two service pages have genuinely different jobs - if not, one of them should not exist.
Nothing gets changed until the GSC page-level data confirms which URL Google treats as the incumbent.
2. Choose which page should own the query and write the consolidation plan: redirects, on-page changes, internal linking. The manager has no developer.
Read the worked answer
Pick /ac-repair. It has the best current position (9), the cleanest URL, exact service intent, and it is a service page rather than an article. The blog post should not own a transactional query, and the homepage should not compete at all.
Merge, then redirect. Pull unique content from /services/air-conditioning-repair into /ac-repair first: pricing ranges, response-time promise, brands serviced, service area, FAQ. Then 301 the old service URL to /ac-repair. One hop, 301, destination returns 200.
Rewrite the blog post as informational content. Keep the URL - it has links. Retarget title and body to 'signs your AC needs repair / when to call a pro', strip the duplicated transactional blocks, and add exactly one contextual link to /ac-repair. Now two pages answer two intents instead of three answering neither.
Homepage. Change the title to brand plus broad category (for example 'Copperline Heating & Air | HVAC Service in [City]'), and keep one descriptive link to the service page.
Internal linking. Every in-body 'AC repair' anchor sitewide points to /ac-repair, nav and footer included. Remove or re-anchor links to the redirected URL, including inside the blog post.
Without a developer: HubSpot URL redirects, page settings for titles and canonicals, the blog editor. Sequence: content merge → rewrite target page → redirects → link cleanup → resubmit sitemap → request indexing. Test each redirect manually.
3. What do you measure, over what window, and what would make you reverse one of the decisions?
Read the worked answer
Window: 8–12 weeks. Do not judge before week four; recrawl and re-ranking lag, and redirects often dip first.
Measure:
- URL stability. Under GSC → query → Pages, one URL should hold the query most weeks. This is the leading indicator that cannibalization is resolved.
- Position and clicks for 'AC repair [city]' and close variants. Position 9 to 4 is a realistic target; CTR improves before raw clicks do.
- Service-page conversions - calls and forms from /ac-repair, the number leadership actually cares about.
- The blog post's own rankings on informational queries: it should keep or improve those, on different terms.
- Coverage: no 404s or soft 404s created by the redirect.
Reverse if: the blog post loses its informational rankings and /ac-repair does not gain - the intents were not cleanly separated, so split them back apart rather than redirecting further. Also reverse if /ac-repair sits below its old position for four-plus weeks with no URL ranking, which suggests the merged page is now too broad to match the query well.
Compare year over year, not month over month. HVAC demand swings with weather; a July-to-August comparison will mislead you into thinking a fix failed when the market moved.