# Browser Links (/experiments/browser-links)



Load a page in a headless browser and return all unique anchor links after JavaScript rendering.

## API Endpoint [#api-endpoint]

### GET /links [#get-links]

**`url`** `string` (required)

The website URL to inspect (must be http or https)

#### Example Request [#example-request]

```bash
curl "https://your-worker.workers.dev/links?url=https://www.cloudflare.com"
```

#### Success Response [#success-response]

**`url`** `string`

The normalized URL that was loaded

**`linkCount`** `number`

Number of unique links returned

**`truncated`** `boolean`

Whether results were capped at 500 links

**`links`** `array`

Each item has `href` and `text`

```json
{
  "url": "https://www.cloudflare.com/",
  "linkCount": 42,
  "truncated": false,
  "links": [{ "href": "https://www.cloudflare.com/plans/", "text": "Plans" }]
}
```

#### Error Codes [#error-codes]

* `400` - Missing or invalid `url` (`INVALID_URL`)
* `502` - Navigation or extraction failed (`LINKS_ERROR`)

## Use Cases [#use-cases]

* Crawl SPAs and client-rendered navigation
* Build sitemaps from fully rendered pages
* Compare static HTML links vs browser-rendered links

## Deployment [#deployment]

<Steps>
  <Step>
    ### Click the deploy button [#click-the-deploy-button]

    [![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/shrinathsnayak/cloudflare-experiments/tree/main/apps/experiments/browser-links)
  </Step>

  <Step>
    ### Enable Browser Rendering [#enable-browser-rendering]

    Browser Rendering must be enabled on your account.
  </Step>
</Steps>

## Local Development [#local-development]

```bash
cd apps/experiments/browser-links
npm install
npm run dev
```

<Callout>
  `npm run dev` uses `wrangler dev --remote` so a real browser instance is available.
</Callout>

## Cloudflare Features Used [#cloudflare-features-used]

* **[Workers](https://developers.cloudflare.com/workers/)** - Edge compute runtime
* **[Browser Rendering](https://developers.cloudflare.com/browser-rendering/)** - Headless Chromium via `@cloudflare/puppeteer`
