> For the complete documentation index see https://domscan.net/llms.txt. Markdown versions of every docs page are available by appending .md to the page URL.

Source: https://domscan.net/nl/docs/products/javascript-seo

# JavaScript SEO-renderingcontrole-API API-referentie

Vergelijk ruwe en gerenderde HTML om te zien welke SEO-signalen van JavaScript afhangen. Gebruik deze referentie om een bewerking te kiezen en het gedocumenteerde responsecontract te integreren.

[Productpagina bekijken](https://domscan.net/nl/javascript-seo-api)

## Bewerkingen

GET `/v1/onpage/render-diff` [API-referentie bekijken](https://domscan.net/nl/docs/products/javascript-seo#getRenderDiff)

## GET `/v1/onpage/render-diff`

Bewerking: `getRenderDiff`
Credits en authenticatie: 7
Authenticatie vereist

GET /v1/onpage/render-diff Tegoeden: 7

#### Queryparameters

| Parameter | Type | vereist |
| --- | --- | --- |
| url | string | vereist |

#### Antwoordvelden

| Veld | Type |
| --- | --- |
| `url` | string |
| `final_url` | string |
| `status` | string |
| `reason` | string \| null |
| `checked_at` | string |
| `raw` | object |
| `raw.fetch` | object |
| `raw.fetch.http_status` | integer \| null |
| `raw.fetch.final_url` | string |
| `raw.fetch.content_type` | string \| null |
| `raw.fetch.bytes` | integer |
| `raw.fetch.truncated` | boolean |
| `raw.fetch.redirect_count` | integer |
| `raw.fetch.duration_ms` | integer |
| `raw.fetch.rendered` | boolean |
| `raw.signals` | object |
| `raw.signals.title` | string \| null |
| `raw.signals.meta_description` | string \| null |
| `raw.signals.canonical` | string \| null |
| `raw.signals.robots` | string \| null |
| `raw.signals.noindex` | boolean |
| `raw.signals.h1[]` | string[] |
| `raw.signals.word_count` | integer |
| `raw.signals.internal_links` | integer |
| `raw.signals.external_links` | integer |
| `raw.signals.structured_data_types[]` | string[] |
| `raw.signals.hreflang_count` | integer |
| `raw.signals.lang` | string \| null |
| `rendered` | object |
| `rendered.fetch` | object |
| `rendered.fetch.http_status` | integer \| null |
| `rendered.fetch.final_url` | string |
| `rendered.fetch.content_type` | string \| null |
| `rendered.fetch.bytes` | integer |
| `rendered.fetch.truncated` | boolean |
| `rendered.fetch.redirect_count` | integer |
| `rendered.fetch.duration_ms` | integer |
| `rendered.fetch.rendered` | boolean |
| `rendered.signals` | object |
| `rendered.signals.title` | string \| null |
| `rendered.signals.meta_description` | string \| null |
| `rendered.signals.canonical` | string \| null |
| `rendered.signals.robots` | string \| null |
| `rendered.signals.noindex` | boolean |
| `rendered.signals.h1[]` | string[] |
| `rendered.signals.word_count` | integer |
| `rendered.signals.internal_links` | integer |
| `rendered.signals.external_links` | integer |
| `rendered.signals.structured_data_types[]` | string[] |
| `rendered.signals.hreflang_count` | integer |
| `rendered.signals.lang` | string \| null |
| `js_dependence` | string \| null |
| `rendered_word_share` | number \| null |
| `differences[]` | object[] |
| `differences[]` | object |
| `differences[].field` | string |
| `differences[].change` | string |
| `differences[].impact` | string |
| `differences[].raw` | unknown |
| `differences[].rendered` | unknown |
| `issues[]` | string[] |

#### Voorbeeldverzoek

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/onpage/render-diff?url=https%3A%2F%2Fexample.com"
```

```javascript
const response = await fetch("https://domscan.net/v1/onpage/render-diff?url=https%3A%2F%2Fexample.com", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.get(
    "https://domscan.net/v1/onpage/render-diff?url=https%3A%2F%2Fexample.com",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
```

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/onpage/render-diff?url=https%3A%2F%2Fexample.com", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Status, string(data))
}
```

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/onpage/render-diff?url=https%3A%2F%2Fexample.com")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))
```

#### Voorbeeldantwoord

```json
{
  "url": "https://example.com/shoes/trail-runner",
  "final_url": "https://example.com/shoes/trail-runner",
  "status": "ok",
  "reason": null,
  "checked_at": "2026-10-13T12:00:00.000Z",
  "raw": {
    "fetch": {
      "http_status": 200,
      "final_url": "https://example.com/shoes/trail-runner",
      "content_type": "text/html",
      "bytes": 183,
      "truncated": false,
      "redirect_count": 0,
      "duration_ms": 380,
      "rendered": false
    },
    "signals": {
      "title": "Example Outdoor",
      "meta_description": null,
      "canonical": null,
      "robots": "noindex",
      "noindex": true,
      "h1": [],
      "word_count": 0,
      "internal_links": 0,
      "external_links": 0,
      "structured_data_types": [],
      "hreflang_count": 0,
      "lang": "en"
    }
  },
  "rendered": {
    "fetch": {
      "http_status": 200,
      "final_url": "https://example.com/shoes/trail-runner",
      "content_type": "text/html",
      "bytes": 3535,
      "truncated": false,
      "redirect_count": 0,
      "duration_ms": 4210,
      "rendered": true
    },
    "signals": {
      "title": "Trail Running Shoes for Rocky Terrain | Example Outdoor",
      "meta_description": "Lightweight trail running shoes with a grippy outsole, rock plate and breathable mesh. Free returns within 30 days on every pair.",
      "canonical": "https://example.com/shoes/trail-runner",
      "robots": "index, follow",
      "noindex": false,
      "h1": [
        "Trail Running Shoes for Rocky Terrain"
      ],
      "word_count": 122,
      "internal_links": 5,
      "external_links": 2,
      "structured_data_types": [
        "AggregateRating",
        "Brand",
        "BreadcrumbList",
        "ListItem",
        "Offer",
        "Product",
        "Rating",
        "Review"
      ],
      "hreflang_count": 3,
      "lang": "en"
    }
  },
  "js_dependence": "high",
  "rendered_word_share": 1,
  "differences": [
    {
      "field": "title",
      "change": "changed_by_js",
      "impact": "high",
      "raw": "Example Outdoor",
      "rendered": "Trail Running Shoes for Rocky Terrain | Example Outdoor"
    },
    {
      "field": "meta_description",
      "change": "added_by_js",
      "impact": "medium",
      "raw": null,
      "rendered": "Lightweight trail running shoes with a grippy outsole, rock plate and breathable mesh. Free returns within 30 days on every pair."
    },
    {
      "field": "canonical",
      "change": "added_by_js",
      "impact": "high",
      "raw": null,
      "rendered": "https://example.com/shoes/trail-runner"
    },
    {
      "field": "robots",
      "change": "changed_by_js",
      "impact": "high",
      "raw": "noindex",
      "rendered": "index, follow"
    },
    {
      "field": "noindex",
      "change": "removed_by_js",
      "impact": "high",
      "raw": true,
      "rendered": false
    }
  ],
  "issues": [
    "robots_changed_by_js",
    "canonical_changed_by_js",
    "h1_requires_js",
    "content_requires_js",
    "links_require_js",
    "structured_data_changed_by_js"
  ]
}
```

#### HTTP-statuscodes

- `200` OK
- `400` Ongeldig verzoek
- `401` Niet geautoriseerd
- `402` Betaling vereist
- `429` Te veel verzoeken

## Referentiebronnen

[OpenAPI 3.0](https://domscan.net/v1/openapi.json)
[Postman](https://domscan.net/v1/postman.json)
[MCP](https://domscan.net/nl/mcp-domain-checker)
