> For the complete documentation index, see [llms.txt](https://docs.helodata.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.helodata.com/troubleshooting/website-wont-load.md).

# Website won't load

The page is blank, half-loaded, or just spinning. Walk through this from top to bottom.

## 1. Is helodata returning anything at all?

Run a known-good request through the same credentials:

```bash
curl -v --proxy http://USER:PASS@gate.helodata.io:7777 https://ipv4.icanhazip.com
```

If that returns an IP, the gateway path is fine — move on. If not, see [407](/troubleshooting/407.md) or [522](/troubleshooting/522.md).

## 2. Is the target reachable from this exit IP?

Use the request\_id from the failed request, or test directly:

```bash
curl -v --proxy http://USER:PASS@gate.helodata.io:7777 https://example.com
```

Look for the response status and headers. Possibilities:

* **`200` but empty body** — site requires JS rendering, see step 4
* **`403` from helodata** (`X-Helodata-Error-Code: restricted-category-*`) — target is on the [restricted list](/products/overview/restricted-targets.md)
* **`403` from target** (no `X-Helodata-Error-Code`, `Server: cloudflare`) — IP reputation, see [CAPTCHAs](/troubleshooting/captchas.md)
* **`5xx`** — see [522](/troubleshooting/522.md) or [SSL errors](/troubleshooting/ssl-errors.md)

## 3. Is the target a JS app (SPA)?

Open the target in a non-proxied browser. If it loads via DevTools showing a flurry of XHR / fetch calls after the initial HTML, it's a SPA. Plain `requests` won't render the page — it only gets the empty shell.

**Fix** — switch to a real browser:

* [Playwright](/integrations/scraping-tools/playwright.md) or [Puppeteer](/integrations/scraping-tools/puppeteer.md)
* An antidetect browser ([AdsPower](/integrations/antidetect-browsers/adspower.md), [Multilogin](/integrations/antidetect-browsers/multilogin.md))

When [Web Unblocker](/products/overview-4.md) ships, it does this transparently.

## 4. Does the site return different markup to your IP's country?

Compare what you get through helodata vs what you see in a regular browser:

```bash
curl --proxy http://USER:PASS@gate.helodata.io:7777 https://example.com -o through-proxy.html
curl https://example.com -o direct.html
diff <(head -200 through-proxy.html) <(head -200 direct.html)
```

Differences mean the site geo-personalizes content. That's expected for `region-de` requests — make sure that's what you wanted.

## 5. Is the page being served but resources are blocked?

Inspect with curl `--include` and look at `Content-Security-Policy`, `X-Frame-Options`, or redirects to a captcha challenge. Browsers will display a blank page if a script-src is blocked.

## 6. Are you hitting a Cloudflare challenge?

A response with HTML content like `cf_chl_opt` or a `cf-mitigated: challenge` header means Cloudflare is challenging you. Handling:

* Try sticky session + browser-aligned headers — see [CAPTCHAs](/troubleshooting/captchas.md)
* Use a real browser (Playwright/Puppeteer with stealth)
* Try a different exit IP — reputation may differ

## 7. Is there a redirect loop?

```bash
curl -L --max-redirs 10 --proxy http://USER:PASS@gate.helodata.io:7777 https://example.com
```

`-L` follows redirects. If `--max-redirs` triggers, the target is bouncing you between two URLs based on a cookie / header it expects.

**Fix** — capture and replay the cookie expected at each hop, or use a real browser.

## 8. Last resort — open a ticket

```
- Target URL:
- Sub-user:
- Two X-Helodata-Request-Ids from failing requests:
- What you tried already:
```

Email <support@helodata.com>. We can replay the request from our side and tell you whether the issue is on us, the target, or your client.
