How to simulate localisation for Google SEO

Google uses many signals to rank websites for particular keywords. According to Brian Dean from Backlinko, they use 210 SEO signals.

One signal that has been getting stronger and stronger over the recent years is localisation. Google uses GPS, IPs and other methods to determine where the search is performed from.

If you scroll all the way down after performing a search request, you will be able to see what Google uses as localisation for your search. In my case, it correctly knows where I am located in Australia.

Location detected by IP address

While not relevant to all websites, it is highly relevant to local businesses, where the SERP is dominated by Google maps and local businesses.

Local and organic search results

If you think that only the local element is affected by location, you would be very wrong.

And while this is great for local businesses and users of the search engine, it makes the job of search engine optimisers much harder.

Recently, I was working on optimising a local business located 2 hours from my office. As a result, I couldn't get Google to display the search results relevant to that business, which is local searches.

To avoid having to travel there, one could install a GPS faking add on in their browser.

GPS faking

Or better yet, use a tool that supports local searches out of the box.

How localised searches are implemented

Prior to 2017, the tools could simply use the local google version with the top level domain (TLD).

For example, if I wanted to localise my search to France, I would simply query https://www.google.fr

This is however not working anymore, and you'll see the same results no matter which Google TLD you're using.

TLDs have no impact on rankings

There is however a query parameter that can be used. The hierarchy goes like this:

  1. Is there a query param? Use that
  2. No query param? Try to use GPS if available
  3. No GPS? Use IP address

Okay, so what is a query param and how does the it work?

query param

Query params start with a question mark, followed by the key (in this case q which stands for query), an equal sign and the URL encoded value. URL encoding changes spaces with + signs etc.

We can add more params by separating them with the & sign:

multiple query params

This is what we will take advantage of. We will append our own query params to set the country, language, location etc.

Country param

The country param is very simple, it's simply gl as key and the ISO 3166-1 alpha-2 country code as the value.

For example, to set the country to Australia, I would add this to the URL: &gl=au.

Search location param (UULE)

The location uses uule as a key.

The value is little trickier however. It starts with w+CAIQICI. Next we have the length of the value, represented by one character. Here is a function doing the conversion in Elixir:

  def string_keys(location) do
    case String.length(location) do
      4 -> "E"
      5 -> "F"
      6 -> "G"
      7 -> "H"
      8 -> "I"
      9 -> "J"
      10 -> "K"
      11 -> "M"
      12 -> "N"
      13 -> "L"
      14 -> "O"
      15 -> "P"
      16 -> "Q"
      17 -> "R"
      18 -> "S"
      19 -> "T"
      20 -> "U"
      21 -> "V"
      22 -> "W"
      23 -> "X"
      24 -> "Y"
      25 -> "Z"
      26 -> "a"
      27 -> "b"
      28 -> "c"
      29 -> "d"
      30 -> "e"
      31 -> "f"
      32 -> "g"
      33 -> "h"
      34 -> "i"
      35 -> "j"
      36 -> "k"
      37 -> "m"
      38 -> "n"
      39 -> "l"
      40 -> "o"
      41 -> "p"
      42 -> "q"
      43 -> "r"
      44 -> "s"
      45 -> "t"
      46 -> "u"
      47 -> "v"
      48 -> "w"
      49 -> "x"
      50 -> "y"
      51 -> "z"
      52 -> "0"
      53 -> "1"
      54 -> "2"
      55 -> "3"
      56 -> "4"
      57 -> "5"
      58 -> "6"
      59 -> "7"
      60 -> "8"
      61 -> "9"
      62 -> "-"
      63 -> " "
      64 -> "A"
      65 -> "B"
      66 -> "C"
      67 -> "D"
      68 -> "E"
      69 -> "F"
      70 -> "G"
      71 -> "H"
      72 -> "I"
      73 -> "J"
      76 -> "M"
      83 -> "T"
      89 -> "L"
    end
  end

Next, we have the base64 encoded location.

When pieced together, here is what we end up with:

&uule=w+CAIQICI{length_code}{base64}

where {length_code} is the character returned by the table above and {base64} is the base64 encoded location.

As an example, here is the complete URL for searching "White Card Gold Coast" from the Gold Coast: https://www.google.com/search?q=White+Card+Gold+Coast&gl=AU&uule=w+CAIQICIKZ29sZCBjb2FzdA==

With this simple trick, we can now search from anywhere in the World!

Updated search location

If you are not looking to code your own tool and you are simply looking for an online tool that does it for free, our free keyword rank checker supports search location. In addition to localisation, it will display 100 search results, highlight the domain you're looking for, and even show any backlinks pointing to it!