cloro

Google goto URLs: what broke on 30 October and who fixed it

Ricardo Batista
Founder, cloro
•10 min read•
On this page

If you track rankings, you need one fact from Google: which site sits at which position. A Google goto URL hides that fact behind a redirect, and on 30 October Google made the redirect slow to follow. A tool that stores the redirect reports google.com as the ranking site, or loses the result altogether, and the API call behind it still reports success.

This post covers what a Google goto URL is, what changed on 30 October, how the SERP APIs we benchmark are faring, and our own day of fixing it, with the route that worked.

01:30

UTC on 30 Oct: Google starts holding most goto links

4 of 4

SERP APIs we benchmark lost the real link on most organic results

100%

of cloro’s organic links real in the first response, from 20:20 UTC

13% to 36%

real links per read on the other three APIs in the same window

Data through 30 October 2026, 21:50 UTC. The window after our fix is short, and we will update this post as it grows.

What is a Google goto URL?

A Google goto URL is a redirect that sits between a search result and the page it leads to. Instead of linking straight to the site, the result links to Google, and Google forwards the click:

The page:  https://www.irs.gov/retirement-plans/roth-iras
The link:  https://www.google.com/goto?url=CAESaQHrOzAVo6eSING08Xwejko00gHtjgRJAr...

Search Engine Roundtable traced the first sighting to 23 June 2026. Google confirmed the rollout on 26 August. Its statement to Search Engine Land reads: “We have a long history of deploying technical measures against evolving forms of abuse, and we regularly take steps to protect our services and users.”

The token in a Google goto URL hides the destination. ScrapingBee’s analysis found you “cannot practically decode it back into the destination URL locally”, so the only way to learn where a result leads is to ask Google, one link at a time.

Who a Google goto URL hurts depends on what you read:

  • Searchers barely notice. The click still lands on the page, though Malwarebytes points out that hovering over a result no longer shows where it leads.
  • Site owners keep their analytics. Attributer tested 10 device and browser combinations and the referrer came through on all of them.
  • Anyone reading results by machine loses the URL. Rank trackers, SERP APIs, AI-visibility tools and agents that ground answers on Google all need it.

Until this week, resolving a Google goto URL was cheap. A request to the link came back with a redirect, and SERP APIs did that for you before returning the page. DataForSEO reported on 27 August that only 0.01% of its SERPs carried an unresolved organic goto URL, and SerpApi wrote on 5 September that it was “returning direct destination URLs again”. In our data, goto URLs stayed rare on all three through 28 October, on under 3% of reads.

At 01:30 UTC on 30 October that stopped working. A request for most Google goto URLs now answers with a normal success status and a Verifying your request page that counts down. Only after the countdown does the same link redirect. In our production traffic the wait ran from about 60 to 115 seconds, depending on where the first request came from. We first saw this page on a small share of requests on 29 October. On the 30th, it covered about 89% of the goto links we followed.

That leaves a SERP API three bad options: hold every search open for about two minutes, return the page with redirects in place of links, or fail the request.

cloroOxylabsSerpApiDataForSEO
100%50%0%
Google holds links, 01:30 UTC
cloro fix, 20:00 UTC
Oct 29, 12:00 UTCOct 30, 21:00 UTC
Share of organic links that came back as the real URL in the first response, per hour (UTC), from 12:00 on 29 October to 21:50 on 30 October. Same queries and rule for every provider; a failed read counts as zero. The cloro line breaks from 02:00 to 06:59, where it returned no pages for these queries. cloro monitoring corpus.

Every line drops in the same hour, so this was a change on Google’s side. The three competitors held flat at a fraction of their old rate and kept reporting success. Our line came back at the same low level, and stayed there until the fix at 20:00 UTC.

We run the same fixed queries through our API and three others throughout the day, on desktop and iOS. These are the reference queries from our poisoned SERPs study: queries whose correct first page we know. Each read scores the share of its organic links that came back as a real URL.

cloroOxylabsDataForSEOSerpApi
28 Oct to 30 Oct 01:00100%95%97%96%
30 Oct 07:00 to 20:0024%29%35%13%
30 Oct 20:20 to 21:50100%31%36%13%
Share of organic links returned as the real URL per read, by window (UTC), desktop and iOS. A failed read counts as zero. cloro monitoring corpus, 144 reads per provider in the last window.
Real URLGoto redirectEmptyFailed
cloro
DataForSEO
Oxylabs
SerpApi
What each provider's organic links held per read, 30 October, 20:20 to 21:50 UTC, 144 reads per provider. No call failed.

The takeaway: a real link is now the exception on three of the four APIs, and those calls still report success.

Here is one organic result from each provider’s response for the query what is a roth ira, read within the same 8 seconds at 21:10 UTC on 30 October:

// SerpApi: organic_results[]
{ "link": "/goto?url=CAESbQHrOzAVCxt0k_Nk0u4T...", "displayed_link": "https://www.schwab.com › ira › roth-vs-traditional-ira" }

// DataForSEO: items[] of type organic
{ "url": "https://google.com/goto?url=CAESbgHrOzAVMRTO3VjL...", "domain": "google.com", "breadcrumb": "https://www.forbes.com › Advisor › Retirement" }

// Oxylabs: results.organic[]
{ "url": "/goto?url=CAESaQHrOzAVuw9VrS4l...", "url_shown": "https://www.irs.gov› retirement-plans › roth-iras" }

// cloro: organicResults[]
{ "link": "https://www.irs.gov/retirement-plans/roth-iras", "redirectLink": "https://www.google.com/goto?url=CAESaQHrOzAVo6eS...", "displayedLink": "https://www.irs.gov > retirement-plans > roth-iras" }

None of the three puts the full URL in another field. On the goto results we checked, the shown URL gave the host on 89% to 93% of them, as an origin and a breadcrumb, and about a third of those were cut short. That is enough to credit a domain, and not enough to tell which page ranks.

Nothing in the response flags the problem, which is why it is easy to miss:

A page of goto links through a scraper's checks
  • Request statusSuccesspassed
  • Captcha or block pageNonepassed
  • Organic results on page one6passed
  • Page parsedYespassed
  • Organic links with a real URL0 of 6failed
The SerpApi read of what is a roth ira from the example above, 30 October, 21:10 UTC. Only the last check catches it.

Where each provider stands, as of 21:50 UTC on 30 October:

ProviderReal links from 20:20 UTCPublic positionResolver endpoint we could find
cloro100.0%This postPOST /v1/monitor/google/goto
DataForSEO36.0%No statement on this change. Its August post standsNone
Oxylabs31.2%No statement. Its changelog has no goto entryNone
SerpApi13.1%Open incident since 10:39 UTC, and issue #4315, where its team reports a customer’s production is affectedNone

Two other things moved on the competitors’ side. DataForSEO’s average read went from 7.5 seconds before the hold to 21.3 seconds in its first hours, and back to 8.2 seconds by the evening. We do not know why. Oxylabs failed about half of its reads between 11:00 and 12:59 UTC, with timeouts and HTTP 500s, and was back at full success by 14:00. On the reads that succeeded, its share of real links stayed near 31%.

The AI sections held up better. In a 3-hour sample that afternoon, AI Overview and AI Mode sources were still mostly real URLs on SerpApi and DataForSEO. Oxylabs AI Mode was the exception, with 150 of 165 sources as goto links.

It took most of the day to get from about one real link in four to all of them. The first answer that worked was too slow, so we kept it as a fallback and kept looking.

  1. 29 Oct, 00:00 UTC

    The "Verifying your request" page appears on 7% to 9% of our Google attempts, up from about 0.5% (cloro)

  2. 30 Oct, 01:30

    Google holds about 89% of goto links. Real links fall on every API we benchmark (cloro monitoring corpus)

  3. 07:16

    A held link ships as an empty `link` beside its `redirectLink`, so nobody reads a Google URL as a google.com result (cloro)

  4. 09:31

    We test waiting out the hold on a share of traffic. Locally, 29 of 29 held links resolve, at about 116 seconds per request against about 7 (cloro)

  5. 10:30

    Each held link waits on its own timer, after 87.3% resolved on a single shared wait in production (cloro)

  6. 10:39

    SerpApi opens a public incident for goto links in organic results (SerpApi)

  7. 11:43

    Our goto endpoint moves onto its own queue, which retries each held link when its countdown ends (cloro)

  8. 15:29

    About 10% of Google pages now add a `gsessionid` tail to goto links, which broke 9% of the resolved links in our sample. Fixed (cloro)

  9. 20:00

    We ship a second route that needs no wait. By 20:20, every organic link on our reference queries comes back real (cloro monitoring corpus)

Waiting worked, but it was never the answer. Two minutes per search is fine for a nightly rank check and unusable for an agent or a product with a user waiting. This chart shows what finding the faster route did:

cloroOxylabsSerpApiDataForSEO
100%50%0%
Fix ships, 20:00 UTC
19:00 UTC21:40 UTC
Share of organic links that came back as the real URL in the first response, per 10 minutes (UTC), 30 October. Same queries and rule for every provider. cloro monitoring corpus.

Reads did not get slower. Our average read took 6.1 seconds after the fix, against 8.8 seconds before the hold. We also checked the links themselves: on every link read from 20:20 to 21:50, the host of the returned URL matched the host Google displayed on the result.

How we fixed it: a second route that does not wait

The hold sits on the /goto path. In our tests, the token inside a Google goto URL also works on another Google redirect path, and that path answers at once. So instead of waiting at the first door, we use the second one, with the same token and no countdown.

Through /goto
Token sent to /goto
200 with a “Verifying your request” page and a countdown
Same request again when the countdown ends
Redirect to the real page
60 to 115 s
per link, in production
Through the second route
Same token sent to the other redirect path
Redirect to the real page, straight away
We check that the answer is a real destination outside Google
0.24 s
for seven links, in our test
The same link, two ways to ask Google where it leads. The 0.24 seconds is one test on seven captured links, not a production benchmark.

Every Google read now runs this for each organic link. You send the same request as before, and the real URL arrives in link. If the route misses, the link falls back to the old path, and the response says so instead of hiding it.

Read the Google page
Parse the results and keep the token behind each link.
Ask the second route
Send each token down the path with no countdown, and check that the answer is a real destination.
Destination found
The real URL ships in link, in the first response, with no extra call or credit.
Route misses or Google holds
link ships empty, and redirectLink goes to the /goto endpoint once the hold ends.

We tried three approaches that day, and only the third is both complete and fast:

Follow /goto once and ship what comes backabout 7 s per search · 23.9% real links
Wait out the hold, then follow againabout 116 s per search · 87.3% real links on first production run
Use the second route6.1 s per search · 100% real links
Bars show the share of real links. First row: cloro, 30 October, 07:00 to 20:00 UTC. Second row: held links resolved after one shared wait, 09:46 to 09:50 UTC, on a share of traffic. Third row: cloro, 20:20 to 21:50 UTC. cloro monitoring corpus.

We are not publishing the exact request. Google can close a route as soon as it is described, and the poisoned SERPs fix taught us that it changes things without notice. If this route closes, the fallback still gets you every link that resolves after the wait.

How to handle Google goto URLs in your own pipeline

Whatever provider you use, four checks tell you where you stand:

  1. Count the redirects in your raw responses. Search the link field for /goto?url=. Your provider’s success rate will not show it.
  2. Look for google.com climbing in your domain reports. A tool that reads the host from a Google goto URL credits the result to Google. DataForSEO’s domain field reads google.com on these results.
  3. Fall back to the shown URL for the domain only. SerpApi’s displayed_link, DataForSEO’s breadcrumb and Oxylabs’ url_shown keep your domain counts working on roughly nine results in ten. They do not give you the page.
  4. If you follow links yourself, plan for the hold. Use GET, because ScrapingBee found HEAD “returned 200 without a Location header”. Keep the wait out of your request path, drop any &gsessionid= tail from the URLs you store, and treat a 200 with a countdown page as “not yet”.

On cloro, the flow is: send a search, read link, and resolve only what came back empty. We ran this code as written:

import os, requests

API = "https://api.cloro.dev/v1/monitor/google"
HEADERS = {"Authorization": f"Bearer {os.environ['CLORO_API_KEY']}"}

page = requests.post(API, headers=HEADERS, timeout=180,
                     json={"query": "what is a roth ira", "country": "US"}).json()

for item in page["result"]["organicResults"]:
    link = item.get("link", "")
    if not link or "/goto?url=" in link:  # Google held this one
        reply = requests.post(f"{API}/goto", headers=HEADERS, timeout=60,
                              json={"url": item["redirectLink"]})
        link = reply.json()["url"] if reply.ok else None  # 502 means still held
    print(item["position"], link)

Today that if rarely runs. Keep it anyway, because Google can change this again, and code that expects a real link in every result is how this problem started.

What this costs across SERP APIs

None of the four lists a separate charge for a real link in the first response. The difference is what happens to the links a provider cannot resolve.

ProviderList price per 1,000 Google searchesLinks it could not resolve
cloro$1.20 async or $2.00 sync on Hobby ($100 a month for 250,000 credits)/goto endpoint, 1 credit each, charged only on success
DataForSEO$0.60 standard, $1.20 priority, $2.00 liveNo documented endpoint
Oxylabs$1.35 down to $0.90 with JS renderingNo documented endpoint
SerpApi$3.75 at 1M searches a monthNo documented endpoint

The takeaway: compare price per usable link. DataForSEO live at $2.00 is returning about 36% real links today. A sync search on our Hobby plan costs the same $2.00 per 1,000 and returned all of them in the window above.

Google goto URLs and poisoned SERPs are separate problems, and solving one does not solve the other. A page can carry 100% real links to the wrong sites.

On the same reads from 07:00 to 21:50 UTC on 30 October, the share that returned the full Google page was 84.4% for cloro on desktop, against 81.0% for Oxylabs, 21.8% for DataForSEO and 21.6% for SerpApi. On iOS, Oxylabs led at 75.0%, against 67.3% for cloro, 25.6% for DataForSEO and 8.4% for SerpApi. Check both numbers on any provider you evaluate.

What we still do not know

  • How long this holds. Our 100% covers a short window at the end of one day. Google has changed this surface repeatedly since June, and it can close the second route too. We will update the numbers here.
  • Why Google holds links. Our measurements show the length of the hold depends on the first request’s origin. We do not know what starts it, and Google has made no statement about it. Its only statement is the general one from August.
  • What the other three will do. SerpApi’s incident is open and its team says it is working on a fix. Any of the three could ship one at any time, and we will record it here when they do.
  • AI Mode. Today’s 20:00 UTC change covers Google Search results. AI Mode uses the earlier path.

Method

  • Corpus. Fixed reference queries, run through cloro, Oxylabs, SerpApi and DataForSEO throughout the day on desktop and iOS, with the same queries for each provider. These are the queries from our poisoned SERPs study.
  • Real link. An organic result’s link field holds an absolute URL on a host outside Google. A relative /goto, an absolute goto URL and an empty field all count as not real.
  • Per-read score. Real links divided by organic links on that read, averaged over the window. A failed read counts as zero.
  • Windows. 28 October 00:00 UTC to 30 October 01:00; 30 October 07:00 to 20:00; and 20:20 to 21:50. The tables leave out the changeover from 20:00 to 20:20. Times in the day’s timeline are when each change merged.
  • Full page. The same rule as the poisoned SERPs study: at least three of the query’s usual sites in the top five.
  • Vendor positions. Read from each vendor’s status page, changelog, API docs and pricing page on 30 October 2026. A vendor can have a statement or a document we did not find.

We run every request as a logged-out session, so the page we return is the one an unauthenticated visitor sees. If your rank tracking started reporting google.com or empty URLs this week, run the same keywords through cloro’s SERP API and compare the raw responses.

Ricardo Batista

About the author

Founder, cloro

Ricardo is one of the founders and engineers behind its SERP and AI-search scraping infrastructure. Before cloro he scaled a financial comparison site to $7M ARR and ran the full-country operations of a unicorn to $65M ARR, then went back to building. He writes about search engine scraping, generative-engine optimization, and turning live search and AI-answer data into something teams can act on.

Frequently asked questions

What is a Google goto URL?

A redirect on Google's own servers that sits between a search result and the page it leads to. The result links to `google.com/goto?url=` plus an encoded token, and Google sends the browser on to the real page. Google confirmed the rollout on 26 August 2026 and describes it as a measure against abuse.

How do I get the destination from a Google goto URL?

The token cannot be decoded locally, so you have to ask Google. A GET request with redirects turned off returns the destination in the Location header, when Google answers with a redirect. Since 30 October 2026 most links first answer with a "Verifying your request" page for about one to two minutes. cloro's `/goto` endpoint takes the link and returns the destination.

Do Google goto URLs break my analytics?

Not in the tests we have seen. Attributer tested 10 device and browser combinations and the Google referrer came through on every one, so visits still count as organic search. The damage is to tools that read Google's results pages: rank trackers, SERP APIs and anything built on them.

Why does my rank tracker show google.com as the ranking site?

Because the tool stored the redirect instead of the destination. A Google goto URL's host is google.com, so a tool that reads the host from the link credits every affected result to Google. Check the raw response from your data provider: if the link field holds `/goto?url=`, the destination was never resolved.

Does cloro return real links for Google results?

Yes. Since about 20:20 UTC on 30 October 2026, every organic link on our reference queries has come back as the real URL in the first response, with no wait. If Google holds a link again, `link` comes back empty, `redirectLink` holds the redirect, and the `/goto` endpoint resolves it for 1 credit.