Sim Card Juggling, Chrome Flags, and Fixing Local Search on Mobile

Local Pack Results Shift Based on SIM Location

This one made me stare at my phone for a good 10 minutes like it had betrayed me. A client’s bakery in Pasadena wasn’t showing up in the local pack on my Pixel 6, but kept showing for my teammate using an Android emulator logged into the same Wi-Fi. Turns out? My phone had a second SIM from a Canada trip. Android 13 decided that SIM 2 was now gospel and started shifting Google local intent assumptions north of the border.

So yeah. If you or your client switches SIMs often—international clients, roaming testers, etc.—the local search results you’re debugging on mobile might quietly adapt to network location signals from the SIM itself, not just current geolocation. Throw airplane mode + Wi-Fi into that cocktail and things get real fuzzy. It’s not just about GPS—if Google thinks you live in Montreal because of your LTE handshake metadata, your local bakery in Pasadena won’t break into the top three spots unless someone explicitly types “Pasadena” in the query.

If your search results look wildly different from your user logs, double-check the phone’s SIM and network source. Roaming infos poison the well in subtle, chaotic ways.

There’s no setting in GMB or Android to force this behavior, and clearing location history didn’t help. What worked? Yanking the SIM out and restarting into Wi-Fi-only mode. Yep. 200 IQ debug right there.

Incorrect Locale Caching in Chrome Mobile

I’ve burned two afternoons on this. Chrome for Android (notably canary and beta builds, but sometimes stable) caches locale assumptions even after language or region settings are changed—not just in-app, but OS-wide. You can flip language to English (US), reboot, wipe Chrome cache, and still get local search mixed results tailored to your previous region.

“Aha” Moment

From DevTools over USB inspection (remote debugging via MDN workflow), I noticed a X-Goog-Geo-Loc header being sent that didn’t match GPS logs at all. Cross-referenced it with browser local storage, and boom—there’s a stale geo data chunk from when I tested VPN routing for Calgary earlier in the month.

This impacts AdSense geo-targeted placements too. If location hints to Google suggest a user is “frequently in Toronto” (even if GPS is in LA), you’ll get skewed ad delivery impressions and your RPMs will suffer. It’s also why mobile search results sometimes include dodgy Service Area Businesses way outside radius logic.

The fix? Fully uninstall Chrome Mobile, nuke Play Services cache, and reboot. Simply clearing Chrome’s cache wasn’t enough in my case. Bonus points if you disable location accuracy sharing in Android OS until you’re done testing.

Cloudflare Interference with Geo-Sniffing POST Requests

This was buried under nine layers of request bodies, but worth mentioning. Cloudflare sometimes strips or alters geo-inference headers (like CF-IPCountry) inconsistently at the edge if you’ve got “Bot Fight Mode” or basic caching reversed via page rules.

If your mobile app uses lower-level POSTs to retrieve local content (e.g., for search or product filtering), those origin fetches can get garbage location data after going through CF, especially on mobile requests over 3G/4G. What’s worse—Android WebView-based apps don’t send all the same headers as Chrome Mobile proper, which means in-app search performance behaves differently than browser-based mobile UX. Logged this with two devs running Ionic + React Native stacks and they both had to bypass Cloudflare on preflighted CORS calls to fix it.

Yeah, turns out a caching rule you set for favicon optimization yesterday can absolutely throttle your ZIP-code targeting for local results today. Cloudflare giveth; Cloudflare very much taketh away.

AdWords Location Extensions Don’t Always Sync with GMB

Here’s the dumb thing: Google My Business and AdWords have a sync relationship for location extensions, but it’s deeply temperamental. Seen multiple accounts where the GMB listing is correct (address, postal code, service hours), but AdWords serves an older cached place ID that points to a wrong pin, especially for storefronts in malls or complexes.

  • Make sure the Location ID in the asset library exactly matches your GMB listing by going into Business Profile edit mode and copying the Maps share link (has the place ID in it)
  • If it’s off by even one character, re-syncs don’t correct the data
  • An old location ID can nullify your radius and zip targeting in Performance Max campaigns
  • Yes, this affects mobile local pack inclusion and smart campaigns too, because the underlying place ID governs eligibility
  • Editing your Business Profile doesn’t always fix this—sometimes you need to delete and re-add the location in Ads

There’s no alert or error when these are misaligned. You just won’t understand why your click-through rate drops 25% after you move next door. Also, every uploaded feed you’ve built for local inventory ads? Also borked if tied to that stale ID.

Users with Reduced Tracking Disable Map Behavior

Here’s one that I wish had better documentation. If a user has enabled reduced tracking modes—either via Android Settings → Ads → “Opt out of Ads Personalization” OR in My Google Activity–related toggles, local map zoom levels and actual tap-to-call button behavior in mobile SERPs degrade. The zoom never gets tight enough, and on some Pixel devices, live call buttons are just gone.

I pieced this together after one of our store managers couldn’t get directions to populate for his own business even with full GPS permissions enabled. Toggled off ad privacy stuff, rebooted—you get the idea—and suddenly, the local 3-pack popped back into functionality. Start throwing ad blockers or tracker-neutral browsers like Firefox Focus into the mix and it turns into a lottery. Standalone apps fare slightly better, probably because Android Maps API behaves differently than embedded Google Maps calls in Chrome.

So if you’re optimizing for “directions”, “near me”, or “open now” local search behavior… some of your analytics is off. Reduced tracking equal less spatial accuracy, and there’s no way to forced-revert that behavior via site logic or campaign tweaks. It depends entirely on the user’s settings.

Local Ads Fail on Custom Tabs in Hybrid Apps

I’ve had this argument like four times now: Progressive Web Apps and hybrid apps using Android Intent-based custom tabs (e.g., from a React Native shell) do not behave like Chrome for geo-ad rendering. If you’re rendering local ads or tightly-radius mobile campaigns inside one of these webviews, placement targeting can silently fail or downgrade to generic campaigns.

The real kicker? It’s not always obvious. You’ll see impressions and clicks logged, sure, but the areas users are shown in will start looking weirdly coarse, as if they’re not getting full precision-level signals.

What I found from inspecting Android’s Geolocation.getCurrentPosition calls inside such tabs: they’re often downgraded to coarse accuracy, even with navigator.permissions.query({ name: 'geolocation' }) returning “granted”. Somehow, the promise resolves too fast—almost as if it’s prefilled by the shell app without doing a real check.

I ended up pushing some local fallback meta keywords and ZIP-hinting from user inputs to coax back targeting eligibility. Still salty about it.

Google Lens and Snapshot Results Stomp Local SERPs

This sounds insane but happens: On Android phones where users trigger local search via Google Lens or Snapshot voice prompts, the search results funnel through a slightly different intent structure than regular search. That’s why some users get “Photo Print Store near me” ranked differently than if they typed those same words into Chrome.

I didn’t believe this until I had two test phones—one using Lens to scan a business card and one typing manually on the same Wi-Fi. The Lens-based intent favored image-heavy businesses with recent GMB photo uploads and UGC auto-tags. Even worse, the actual title tags from the site had no effect. Zero. The rendered screenshots of SERP results had entirely different blurbs.

So, if you think you’ve nailed your mobile SEO but Lens or Discover traffic looks junky? You’re probably in the wrong data stream. Go upload some photos with embedded location EXIFs and link your site schema. It’s not only about citations anymore.

You don’t control which entrypoint Google chooses. Optimize for where it lands you whether you like it or not.

Hidden GMB Categories Dominate Niche Search Terms

Look, the main interface only lets you pick a few categories in Google Business Profile, but underneath it all, there’s a crazy hidden hierarchy that seriously affects which businesses bump into the local three-pack. For example, “Tile Cleaning” only shows businesses that are tagged under weird derivative categories like “Grout Cleaner” that don’t even appear in search drop-downs.

Your GMB category selection has invisible weight multipliers based on proximity, listing age, and historic ratings in that category. Yep, two auto repair shops with identical profiles and different ages won’t rank the same—and it’s not just backlinks. It’s a quiet competency weighting system Google won’t publicly admit exists.

Found this when I mass-exported category data from the Places API and checked category-response ratios for high-intent search queries. The IDs were different even when the display labels weren’t, and that surfaced the ghost categories.

There’s no interface to reliably toggle these hidden ones unless you use the full Places API. Even then, it’s restricted to server-authorized apps. So if your mobile local targeting feels off despite good proximity and NAP consistency, check whether your real business type is being understood—or bundled under something too generic.

Similar Posts