Keep a geolocation popup off specific Shopify pages

Not every page in a store wants a country suggestion. The wholesale page that only trade customers reach has its own pricing and should not nudge anyone towards the consumer market. A paid landing page for a campaign in one country already sends people to the right place and loses conversions to anything that pops up on arrival. The shipping policy page is read by shoppers trying to find out exactly what the popup would be interrupting. And nobody, ever, wants to be redirected halfway through a checkout.

This article covers the pages GeoBeacon never acts on, how to add your own, how the matching works in detail so you do not over- or under-exclude, and the order in which exclusions are checked relative to everything else the script does.

The pages that are always excluded

GeoBeacon ships with a fixed list of paths it will not touch, regardless of settings: the checkout (both /checkout and /checkouts), /cart, /account, /password, /challenge, and the two app proxy roots, /apps and /tools. The settings page says so under the custom field: checkout, cart, account, password and app pages are always excluded.

The reasoning is about flow, not preference. A shopper who has entered a shipping address and is choosing a payment method has already told you which country they are in; changing their market there would reprice the cart and in many cases empty it. The account pages belong to a customer who logged in on the market they are browsing. The password page is what a store shows while it is closed, and the challenge page is Shopify's bot check, where any extra script is noise. App proxy paths are pages served by other apps through your domain, such as a wishlist or a form, and those apps did not sign up to be redirected. These exclusions match the path and anything beneath it, so /account/orders/123 is covered by /account, but a page that merely starts with the same letters, say /accounting-services, is not.

Adding your own paths

In the app, open Behaviour and find the text area labelled "Never act on these paths". Enter one path prefix per line. The field accepts up to fifty entries, adds a leading slash if you forget it, strips stray spaces, and drops duplicates. Save, and the storefront picks the new list up on the next page load, because the configuration travels with the theme app extension rather than being fetched from a server.

Typical entries, and why each one earns its line:

  • /pages/wholesale for a trade page with its own pricing or a login gate. Trade customers are often abroad relative to the consumer store and should never be offered the retail market.
  • /pages/spring-launch or whatever path a paid campaign lands on. The ad already targeted a country; a popup on arrival is a second question the shopper did not ask, and the interstitial guidance applies with extra force on pages you are paying for traffic to.
  • /policies to keep the shipping, refund and privacy pages quiet. A shopper reading the shipping policy is deciding whether to buy; let them read.
  • /blogs if your articles are read internationally and the content is the same across markets. A reader arriving from a search result for a how-to post is not shopping yet.
  • /collections/outlet or any collection you deliberately show to everyone at one price.

How matching works

Custom entries are prefixes. GeoBeacon takes the current path, removes the market root if the store uses subfolders (so /en-ca/pages/wholesale is compared as /pages/wholesale), and then checks whether the path equals the entry or begins with it. That has two consequences worth knowing before you type.

First, the market-root stripping means one line covers every language and market variant of a page. You do not need /fr/pages/wholesale alongside /pages/wholesale; the French version is matched by the same entry. This is what you want on a store that uses Shopify's Markets subfolders, where the same page exists under several roots.

Second, plain prefix matching is broader than the built-in list. An entry of /pages/wholesale also matches /pages/wholesale-faq and /pages/wholesalers. Usually that is helpful, since related pages tend to share a prefix. If it is not, make the entry more specific, or accept that the sibling page is also quiet. Entries are compared against the path only, so a query string such as ?utm_source=newsletter never affects the match; if you need to switch the script off by query parameter instead, add ?geobeacon=off to a link and the script stays quiet for that page view without being remembered.

Where the check sits

The script decides whether to do anything in a fixed order, and exclusions are neither first nor last. It checks that the app is enabled and not running inside the theme editor, that the visitor is not a known bot, that the URL does not carry the opt-out parameter, and whether the visitor already made a choice that is still remembered. Then it checks the built-in exclusions, then yours. Only after all of that does it look at the referrer, confirm at least one rule is enabled, and ask Shopify which country the browser is in.

Two things follow. An excluded page costs nothing beyond the script download: no detection request, no popup markup, no rule evaluation. And an exclusion does not write anything. A shopper who lands on /pages/wholesale, is left alone, and then clicks through to the home page will see the normal behaviour there, because nothing was stored on the excluded page. If you want a visitor who arrived on a landing page to be left alone for the rest of their visit, the exclusion is the wrong tool; the remembered choice, covered in how long to remember a shopper's choice, is what carries across pages, and it is only written when the shopper answers the popup or is redirected.

Redirect mode needs this more than popup mode

In popup mode an un-excluded page shows a dismissible card, which is irritating on a landing page but recoverable. In redirect mode the shopper is moved before they see the page at all. A campaign that sends German shoppers to /de/pages/sommer while a rule redirects anyone detected in Germany to a separate German domain will lose every one of those visitors to the other site, and the campaign report will say the page had a 100% bounce rate. If you run redirect mode, go through your live campaigns and add their landing paths before you switch it on. The same care applies to any page another system also redirects from; the redirect loop article lists the pairings that fight, and an exclusion on the contested path is often the quickest truce.

Testing an exclusion

  • Open the page in a private window with ?geobeacon=XX appended, where XX is a country that would normally trigger a rule. The parameter forces the detected country for that page view and is never remembered, so it is the quickest way to confirm the popup would have appeared on a non-excluded page.
  • Repeat on the excluded path. Nothing should appear. With the app embed's "Log decisions to the browser console" setting on, the console shows that the script skipped for the reason excluded-path.
  • Try a sibling page that shares the prefix to see whether the broad match is what you intended.
  • If the store uses market subfolders, try the same page under a second root to confirm the single entry covers it.

The exclusion list is one of the smaller settings in GeoBeacon, and it is the one most often left empty by stores that then wonder why a landing page underperforms. Five minutes with your campaign URLs and your policies pages is usually enough. The checkout, cart and account pages are already handled, and you cannot accidentally un-handle them.

Frequently asked questions

Which Shopify pages does GeoBeacon never act on?

Checkout, cart, account, password, challenge, and the app proxy paths under /apps and /tools are excluded whether or not you configure anything. Switching a shopper's market in the middle of checkout or a login flow would break what they were doing, so those paths are not configurable.

How do I stop the geolocation popup on one landing page?

Open GeoBeacon's Behaviour settings and add the page's path, for example /pages/spring-launch, to the field labelled Never act on these paths, one path per line. The script compares the path prefix, so the entry also covers any page whose path begins with that text.

Does an excluded path still load the GeoBeacon script?

Yes, the app embed is part of the theme, so the small script is on every page. On an excluded path it exits before asking Shopify for the visitor's country and before rendering anything, logging the reason excluded-path to the browser console when the app embed's console logging setting is on. No detection request is made.

Does an exclusion work on translated or market subfolder URLs?

Yes. GeoBeacon removes the market root, such as /en-ca/ or /fr/, before comparing, so an entry of /pages/wholesale matches /pages/wholesale, /en-ca/pages/wholesale and /fr/pages/wholesale without separate lines for each.