ExoGrow Solutions — duplicate URL redirect map

Built from the July 2026 Search Console export. Priority is based on combined impressions being split across duplicate URLs — higher combined volume means more ranking signal currently being wasted.

1. Blog vs root duplicates (highest priority — real content, real traffic being split)

Old URL (redirect from)Canonical URL (redirect to)Combined impressionsPriorityWhy
/odoo-vs-quickbooks-vs-xero /blog/odoo-vs-quickbooks-vs-xero 174 High Blog version has 4x the impressions and better position (11.5 vs 12.6)
/b2b-seo-vs-b2c-seo /blog/b2b-seo-vs-b2c-seo 127 High Blog version has 13x the impressions and far better position (36.6 vs 52.6)
/blog/how-much-does-a-wordpress-website-cost /blog/how-much-does-a-wordpress-website-cost-in-2026 172 High Two separate posts on the same topic, not a clean-URL/.html pair. The 2026 version performs far better (position 8.7 vs 47.5). Consolidate content into the 2026 post, then redirect the old one rather than maintaining both
/how-much-does-a-website-cost-uk-2026 /blog/how-much-does-a-website-cost-uk-2026 12 Medium Low volume but same pattern — consolidate under /blog for consistency
/seo-huddersfield-ultimate-guide-2026 /blog/seo-huddersfield-ultimate-guide-2026 25 Low Most of this page's impressions are the bot/rank-tracker noise flagged earlier — don't invest further here, just clean up the duplicate

2. Clean URL vs .html duplicates

Old URL (redirect from)Canonical URL (redirect to)Combined impressionsPriorityWhy
/digital-marketing-services/seo.html /digital-marketing-services/seo 1,050 High This is your core service page (the one getting the title/meta fix). Clean URL already dominates — just close off the .html duplicate
/digital-marketing-services/social-media-management.html /digital-marketing-services/social-media-management 5 Low Low volume either way, but standardize on clean URLs sitewide

3. Industry pages — inconsistent naming across three formats

These pages exist in a mix of formats: some clean (/industry/fitness, /industry/b2b-business), some .html, and healthcare specifically has three versions with two different spellings. Recommend standardizing every industry page on the clean, single-word, no-.html pattern already used for fitness and b2b-business.
Old URL(s) (redirect from)Canonical URL (redirect to)Combined impressionsPriority
/industry/health-care.html
/industry/health-care
/industry/healthcare.html
/industry/healthcare 15 Medium — 3-way split, worst of the group
/industry/education.html
/industry/education
/industry/education 10 Low
/industry/hospitality.html
/industry/hospitality
/industry/hospitality 5 Low
/industry/fitness.html /industry/fitness 11 Low
/industry/e-commerce.html /industry/e-commerce 12 Low — no clean version exists yet, create it and redirect .html to it
/industry/legal.html /industry/legal 12 Low — same as above
/industry/real-estate.html /industry/real-estate 1 Low — same as above

4. Needs your confirmation

URLs involvedCombined impressionsQuestion
/contact vs /contact/ 84 /contact/ (trailing slash) currently has better impressions and position, but check your next.config.js trailingSlash setting — canonical should match whatever your framework serves by default, not just whichever happens to be ranking better right now.
/digitalmarketing vs /services/digital-marketing/ n/a Confirmed live via search that both exist, but /digitalmarketing didn't have enough volume to appear in this Search Console export. Worth checking directly in your CMS/routes and consolidating before it picks up split traffic too.

Implementation — Next.js redirects

Since the site runs on Next.js, the cleanest way to action the high and medium priority items above is a redirects() block in next.config.js. All are permanent (301-equivalent) redirects:

module.exports = {
  async redirects() {
    return [
      // Blog vs root duplicates
      { source: '/odoo-vs-quickbooks-vs-xero', destination: '/blog/odoo-vs-quickbooks-vs-xero', permanent: true },
      { source: '/b2b-seo-vs-b2c-seo', destination: '/blog/b2b-seo-vs-b2c-seo', permanent: true },
      { source: '/blog/how-much-does-a-wordpress-website-cost', destination: '/blog/how-much-does-a-wordpress-website-cost-in-2026', permanent: true },
      { source: '/how-much-does-a-website-cost-uk-2026', destination: '/blog/how-much-does-a-website-cost-uk-2026', permanent: true },
      { source: '/seo-huddersfield-ultimate-guide-2026', destination: '/blog/seo-huddersfield-ultimate-guide-2026', permanent: true },

      // Clean URL vs .html
      { source: '/digital-marketing-services/seo.html', destination: '/digital-marketing-services/seo', permanent: true },
      { source: '/digital-marketing-services/social-media-management.html', destination: '/digital-marketing-services/social-media-management', permanent: true },

      // Industry pages -- standardize on clean, single-word slugs
      { source: '/industry/health-care.html', destination: '/industry/healthcare', permanent: true },
      { source: '/industry/health-care', destination: '/industry/healthcare', permanent: true },
      { source: '/industry/healthcare.html', destination: '/industry/healthcare', permanent: true },
      { source: '/industry/education.html', destination: '/industry/education', permanent: true },
      { source: '/industry/hospitality.html', destination: '/industry/hospitality', permanent: true },
      { source: '/industry/fitness.html', destination: '/industry/fitness', permanent: true },
      { source: '/industry/e-commerce.html', destination: '/industry/e-commerce', permanent: true },
      { source: '/industry/legal.html', destination: '/industry/legal', permanent: true },
      { source: '/industry/real-estate.html', destination: '/industry/real-estate', permanent: true },
    ];
  },
};

After deploying, add a self-referencing <link rel="canonical"> tag to each surviving page and resubmit the affected URLs in Search Console's URL Inspection tool so Google recrawls the redirects rather than waiting for natural discovery.