> 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/ko/docs/products/site-audit

# 사이트 감사 및 SEO 크롤러 API API 레퍼런스

최대 50개 페이지를 크롤링하여 깨진 링크, 중복, 온페이지 문제를 찾습니다. 이 레퍼런스를 사용해 작업을 선택하고 문서화된 응답 계약을 통합하세요.

[제품 페이지 보기](https://domscan.net/ko/site-audit-api)

## 작업

GET `/v1/site-audit` [API 레퍼런스 보기](https://domscan.net/ko/docs/products/site-audit#getSiteAudit)

## GET `/v1/site-audit`

작업: `getSiteAudit`
크레딧 및 인증: 10-35
인증 필요

GET /v1/site-audit 크레딧: 10-35

#### 쿼리 매개변수

| 매개변수 | 유형 | 필수 |
| --- | --- | --- |
| url | string | 필수 |
| max_pages | integer 허용된 값 `10`, `25`, `50` 기본값 `10` | 선택 사항 |

#### 응답 필드

| 필드 | 유형 |
| --- | --- |
| `url` | string |
| `status` | string |
| `reason` | string \| null |
| `checked_at` | string |
| `robots_txt` | string |
| `max_pages` | integer |
| `summary` | object |
| `summary.pages_crawled` | integer |
| `summary.pages_ok` | integer |
| `summary.pages_not_found` | integer |
| `summary.pages_unknown` | integer |
| `summary.pages_not_html` | integer |
| `summary.pages_redirect_only` | integer |
| `summary.discovered_not_crawled` | integer |
| `summary.blocked_by_robots` | integer |
| `summary.near_duplicate_unknown_pairs` | integer |
| `summary.average_score` | integer \| null |
| `summary.crawl_complete` | boolean |
| `summary.duration_ms` | integer |
| `issues` | object |
| `issues.broken_internal_links[]` | object[] |
| `issues.broken_internal_links[]` | object |
| `issues.broken_internal_links[].url` | string |
| `issues.broken_internal_links[].http_status` | integer \| null |
| `issues.broken_internal_links[].linked_from[]` | string[] |
| `issues.internal_redirects[]` | object[] |
| `issues.internal_redirects[]` | object |
| `issues.internal_redirects[].url` | string |
| `issues.internal_redirects[].final_url` | string |
| `issues.internal_redirects[].linked_from[]` | string[] |
| `issues.duplicate_titles[]` | object[] |
| `issues.duplicate_titles[]` | object |
| `issues.duplicate_titles[].value` | string |
| `issues.duplicate_titles[].urls[]` | string[] |
| `issues.duplicate_meta_descriptions[]` | object[] |
| `issues.duplicate_meta_descriptions[]` | object |
| `issues.duplicate_meta_descriptions[].value` | string |
| `issues.duplicate_meta_descriptions[].urls[]` | string[] |
| `issues.duplicate_h1[]` | object[] |
| `issues.duplicate_h1[]` | object |
| `issues.duplicate_h1[].value` | string |
| `issues.duplicate_h1[].urls[]` | string[] |
| `issues.near_duplicate_content[]` | object[] |
| `issues.near_duplicate_content[]` | object |
| `issues.near_duplicate_content[].a` | string |
| `issues.near_duplicate_content[].b` | string |
| `issues.near_duplicate_content[].similarity` | number |
| `issues.noindex_pages[]` | string[] |
| `issues.canonicalized_pages[]` | object[] |
| `issues.canonicalized_pages[]` | object |
| `issues.canonicalized_pages[].url` | string |
| `issues.canonicalized_pages[].canonical` | string \| null |
| `issues.thin_pages[]` | object[] |
| `issues.thin_pages[]` | object |
| `issues.thin_pages[].url` | string |
| `issues.thin_pages[].word_count` | integer \| null |
| `issues.onpage_checks[]` | object[] |
| `issues.onpage_checks[]` | object |
| `issues.onpage_checks[].check` | string |
| `issues.onpage_checks[].pages` | integer |
| `pages[]` | object[] |
| `pages[]` | object |
| `pages[].url` | string |
| `pages[].final_url` | string |
| `pages[].depth` | integer |
| `pages[].status` | string |
| `pages[].reason` | string \| null |
| `pages[].http_status` | integer \| null |
| `pages[].redirect_count` | integer |
| `pages[].title` | string \| null |
| `pages[].word_count` | integer \| null |
| `pages[].score` | integer \| null |
| `pages[].indexable` | boolean \| null |
| `pages[].canonical` | string \| null |
| `pages[].internal_links` | integer |
| `pages[].inlinks` | integer |
| `pages[].issues[]` | string[] |
| `pages[].redirect_only` | boolean |
| `caveats[]` | string[] |

#### 예제 요청

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/site-audit?url=https%3A%2F%2Fexample.com&max_pages=10"
```

```javascript
const response = await fetch("https://domscan.net/v1/site-audit?url=https%3A%2F%2Fexample.com&max_pages=10", {
  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/site-audit?url=https%3A%2F%2Fexample.com&max_pages=10",
    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/site-audit?url=https%3A%2F%2Fexample.com&max_pages=10", 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/site-audit?url=https%3A%2F%2Fexample.com&max_pages=10")
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))
```

#### 예제 응답

```json
{
  "url": "https://example.com/",
  "status": "ok",
  "reason": null,
  "checked_at": "2026-10-13T12:00:00.000Z",
  "robots_txt": "rules",
  "max_pages": 10,
  "summary": {
    "pages_crawled": 10,
    "pages_ok": 9,
    "pages_not_found": 1,
    "pages_unknown": 0,
    "pages_not_html": 0,
    "pages_redirect_only": 0,
    "discovered_not_crawled": 34,
    "blocked_by_robots": 2,
    "near_duplicate_unknown_pairs": 3,
    "average_score": 88,
    "crawl_complete": false,
    "duration_ms": 14200
  },
  "issues": {
    "broken_internal_links": [
      {
        "url": "https://example.com/old-sale",
        "http_status": 404,
        "linked_from": [
          "https://example.com/"
        ]
      }
    ],
    "internal_redirects": [
      {
        "url": "https://example.com/shoes",
        "final_url": "https://example.com/shoes/",
        "linked_from": [
          "https://example.com/"
        ]
      }
    ],
    "duplicate_titles": [],
    "duplicate_meta_descriptions": [
      {
        "value": "shop trail shoes",
        "urls": [
          "https://example.com/a",
          "https://example.com/b"
        ]
      }
    ],
    "duplicate_h1": [],
    "near_duplicate_content": [
      {
        "a": "https://example.com/a",
        "b": "https://example.com/b",
        "similarity": 0.91
      }
    ],
    "noindex_pages": [],
    "canonicalized_pages": [],
    "thin_pages": [
      {
        "url": "https://example.com/contact",
        "word_count": 74
      }
    ],
    "onpage_checks": [
      {
        "check": "images_alt",
        "pages": 6
      }
    ]
  },
  "pages": [
    {
      "url": "https://example.com/",
      "final_url": "https://example.com/",
      "depth": 0,
      "status": "ok",
      "reason": null,
      "http_status": 200,
      "redirect_count": 0,
      "title": "Example Outdoor",
      "word_count": 820,
      "score": 91,
      "indexable": true,
      "canonical": "https://example.com/",
      "internal_links": 42,
      "inlinks": 0,
      "issues": [
        "images_alt"
      ],
      "redirect_only": false
    }
  ],
  "caveats": []
}
```

#### HTTP 상태 코드

- `200` 성공
- `400` 잘못된 요청
- `401` 인증되지 않음
- `402` 결제 필요
- `429` 요청 과다

## 레퍼런스 리소스

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