If your Google Business Profile gets calls but your website barely ranks, you have a technical problem
I see this pattern a lot: the map pack sends leads, but the site never shows for city + service searches. The content is fine. The backlinks are average. The real culprit sits under the hood. Crawl traps, slow rendering, disorganized location URLs, missing schema, and messy internal links. That’s technical SEO, and on local sites it decides whether you get found or stay invisible.
If you need a quick primer on context, we’ve already explained what local SEO is and how local SEO works. This post is the hard-bitten, build-it-right version.
Where technical SEO breaks on local sites
- Multi-location structure with no location logic. One URL for all cities, or 20 city pages cloned with find/replace. Google reads that as doorway content.
- Slow LCP on mobile because of huge hero images, render-blocking scripts, and fancy page builders. Speed kills conversion and crawl rate.
- GBP links to the homepage for every branch, then UTM parameters get indexed as duplicates. Canonicals are either missing or wrong.
- Faceted filters and calendar widgets generating endless parameterized URLs. Crawl budget gets burned on junk.
- Thin location pages without LocalBusiness schema, NAP in the wrong format, and no internal links pointing to them.
Most teams think “more content” fixes this. Usually it’s the opposite. You need better architecture and controls. If you’re rebuilding from scratch, skim our local SEO checklist to avoid the usual traps.
Technical deep dive: how to architect local sites that actually rank
1) Information architecture for locations and services
- Use a clean hierarchy. For single-location businesses: /service-name/ pages and one /contact/ page. For multi-location: /locations/city/ and /locations/city/service/ templates.
- Avoid city-list footers that link to 100 places. Curate. Use a store locator with crawlable city URLs and limit pagination.
- Do not spin 30 near-duplicate city pages. If you cannot make each location page meaningfully unique, consolidate to service-area language. Read our thinking on hyperlocal SEO strategy before generating city pages.
Trade-off: A flat structure is easier for users, but a siloed /locations/ model scales better. We typically use /locations/ for multi-branch businesses and flat for single-location.
2) Location pages that are rankable assets
Minimum viable elements on each city page:
– Exact NAP in text + LocalBusiness JSON-LD with geo coordinates, openingHours, and sameAs. Use Google’s Local Business structured data as your spec.
– Unique intro that states what you actually do in that area. Mention notable service coverage and parking or access info. Real photos help.
– Embedded map, 3 to 5 fresh reviews, FAQs marked up with FAQ schema, and clear calls to call/WhatsApp/Book. If you want on-page depth, pair this with our guide on on-page SEO for local business.
Failure modes: doorway penalties, soft 404s on thin city pages, and inconsistent NAP. If you use call tracking, keep the canonical number in schema and footer. Use dynamic insertion for the visible number, but don’t let it bleed into your JSON-LD.
3) Speed and Core Web Vitals that move the needle
Targets we hold clients to: LCP under 2.5s, CLS under 0.1, INP under 200ms. Skip vanity scores and focus on LCP element stability and server TTFB.
– Host on fast edge networks with HTTP/2 or HTTP/3, enable compression, and cache HTML at the CDN where possible.
– Make the hero image the actual LCP and serve it as AVIF or WebP. Preload it properly. Don’t lazy-load LCP.
– Remove third-party scripts you don’t need. Defer or delay the rest. Many chat widgets and popups crush INP and CLS. If you must use them, load after user interaction.
– Debug with Core Web Vitals guidance on web.dev. Then implement the fixes from our breakdown on improving website speed.
Trade-off: aggressive caching speeds things up but can break dynamic content like booking widgets. Solve with edge rules and small cache bypasses, not wholesale disabling.
4) Crawl control: sitemaps, robots, and parameters
- XML sitemaps: one primary sitemap that references content, plus image sitemaps if you’re visual-first (restaurants, salons). Keep it under 50k URLs and update on publish.
- Robots.txt: do not block CSS/JS. For WordPress, disallow /wp-admin/ but allow admin-ajax. Never block /uploads/.
- Parameters: add noindex to junk parameters from filters or calendars. In severe cases, use a parameter handling rule and rel=canonical to the clean URL.
- Canonicals: set strict self-referencing canonicals for core pages. For campaign URLs with UTM, always canonical back to the base URL.
Failure mode we see weekly: GBP links to your homepage with UTM, Google crawls it, and your reports show “duplicate pages” with parameters. Fix the canonical and point each GBP listing to its specific location page where it makes sense. If you’re optimizing GBP next, our GBP optimization checklist helps.
5) Schema that earns trust and features
- LocalBusiness, Service, FAQPage, and BreadcrumbList. Do not overmark things. Validate with Rich Results Test.
- For multi-location, generate unique LocalBusiness JSON-LD per page with the correct NAP, geo, and hours. Read our practical playbook on schema for local business.
Ground rule: follow Google’s SEO guidelines. When in doubt, keep schema truthful and minimal.
6) Internal links that mirror how customers search
- From the homepage and service pages, link into your key city pages with anchor text that includes the service and city, not just “Learn more.”
- Use breadcrumbs that reflect /locations/city/service. That helps both crawling and CTR.
- Blogs should point to relevant service or city pages. If you’re writing content for discovery, plan anchor targets in advance. Our guide on internal linking for SEO shows simple patterns that work.
7) Migrations and URL hygiene
- When rebuilding, map old URLs to new ones with 301s before launch. Keep trailing slash rules consistent. Force HTTPS and decide www vs non-www once.
- Check server logs or GSC Crawl Stats after launch to catch spikes on 404s or crawl waste. For deeper technical checks, this Ahrefs technical SEO guide and Moz’s technical SEO overview are worth a read.
8) Mobile reality check for local sites
- Most local traffic is mobile. If your tap targets are tiny or the sticky bars jump around, conversions drop.
- Don’t let interstitials push content below the fold. Keep the CTA visible without hijacking scroll.
- If your site is not mobile-friendly yet, fix that before anything else. Start here: mobile optimization for local business websites.
Practical fixes you can ship this month
- Build a location template with: NAP in text, LocalBusiness JSON-LD, 3 to 5 reviews, embedded map, FAQs, directions, and primary CTA. Use it for each city.
- Re-point each GBP listing to the correct city URL. Then track with UTM but keep canonicals clean. If Maps is your main channel, you’ll also like how to rank higher on Google Maps.
- Compress the hero, preload it, and eliminate render-blocking CSS. Measure, then iterate with PageSpeed and field data. We cover the technique stack in improve website speed.
- Canonical to base URLs and noindex faceted pages. Confirm with a crawl. If you are chasing near me terms, sanity-check your targeting with our piece on ranking for “near me” searches.
- Tune internal links from top traffic pages to your revenue pages. Map at least 3 relevant anchors per target.
- For restaurants and salons, ship an image sitemap for menus and galleries. For home services, add job-type FAQs and service area notes. If you operate in trades, read our playbook on local SEO for home services; if you’re in F&B, see local SEO for restaurants.
If you want a broader plan that includes content and citations, compare this with our write-up on how local SEO works and the realistic SEO timeframe for local business.
Business impact: what this fixes in real numbers
- Cost: A proper technical pass for a 20 to 50 page local site takes 30 to 60 hours if your dev stack cooperates. Heavier if you’re moving hosts or refactoring a theme.
- Sales: Faster pages + clear location signals usually lifts non-brand local clicks by 20 to 60 percent within two months. Calls and bookings follow if your CTAs and trust elements are visible.
- Risk: Thin city pages and crawl traps suppress indexation. Even with good content, you’ll lose map synergy and organic reach. Fixing technical debt first avoids endless content churn.
If you prefer a reference on fundamentals while you plan the work, see how to optimize your homepage for local SEO and our pragmatic view on SEO vs local SEO.
Key takeaways
- Architecture first. Local sites win with clean location and service hierarchies.
- Ship real location pages. NAP in text, LocalBusiness schema, unique value, and visible CTAs.
- Speed is a revenue lever. Fix LCP and INP before chasing shiny features.
- Control crawl. Sitemaps, robots, canonicals, and noindex on junk parameters.
- Internal links drive discovery. Point authority to city and service URLs with intent anchors.
- GBP synergy matters. Link each listing to the right page and keep canonicals clean.
Soft consulting CTA
If your site structure is messy, slow, or fighting Google’s crawler, you will keep bleeding demand to competitors. This is exactly the kind of thing we fix at bijnis.xyz. If you want an audit that prioritizes revenue pages over vanity tasks, reach out. We’ll map the technical work, then hand you a clear backlog your dev can ship.
Resources worth bookmarking:
– Read the official playbook for Google’s SEO guidelines
– Validate your LocalBusiness markup with Local Business structured data
– Deepen your checks with the Ahrefs technical SEO guide
– Cross-reference with Moz’s technical SEO overview
– Use Core Web Vitals guidance on web.dev









