# Vercel — 계정 흔적이 «없다»

> **확인일 2026-09-09** · 참고 [Vercel Domains docs](https://vercel.com/docs/domains)
>
> ⚠️ **근거가 «실측뿐» 이다.** Cloudflare 문서처럼 인용할 공식 조항이 없다 —
> Vercel 은 「계정마다 무엇을 발급한다」를 밝힌 적이 없고, 그래서 「없다」를 증명하려면
> 직접 쏘는 수밖에 없었다. 확정 모집단의 Vercel 사이트 **376곳 전수**가 근거다.
> 공식 조항이 나오면 이 문서의 급이 올라간다.

## 1. 한 줄

**Vercel 은 계정 단위로 식별되는 값을 아무것도 노출하지 않는다.**
NS·헤더·TXT·CNAME 어디에도 없다. 그래서 Cloudflare 식 코호트를 만들 수 없고,
운영자를 가르려면 **사람이 남긴 흔적**(프로젝트 이름·템플릿)을 써야 한다.

> 이 문서는 «없다» 를 기록한다. 안 적어두면 다음에 또 `ns` 를 축으로 쓰려다
> 376곳짜리 공용값에 걸린다. [[cloudflare-nameservers]] 와 대조해서 읽을 것.

## 2. 사실 — 무엇이 없는가

확정 모집단의 Vercel 사이트 **376곳**을 전수로 쏴서 확인했다(2026-09-09).

### ① NS 는 전 고객 공용이다

```
376곳 전부  ns1.vercel-dns.com, ns2.vercel-dns.com     NS 집합 1종 · 100%
```

비교: Cloudflare 는 389곳이 **298종**으로 갈리고 최다가 7%다.
**Vercel 의 NS 는 「Vercel 을 쓴다」는 것 말고 아무것도 안 말한다.**

### ② 헤더는 전부 같거나 전부 다르다

응답 117곳의 헤더 **값**을 봤다. 가운데가 없다 — 축이 되려면
「여러 종으로 갈리되 같은 값을 여럿이 나눠 갖는」 모양이어야 한다.

| 헤더 | 값 종류 | 성격 |
|---|---|---|
| `server` · `access-control-allow-origin` · `cache-control` | 1~7종 | 전 고객 공용 |
| `x-vercel-id` | **114/114 전부 다름** | 요청마다 바뀐다 (지역+요청id) |
| `etag` | **80/80 전부 다름** | 내용마다 바뀐다 |

`x-vercel-id` 의 앞부분은 **응답을 처리한 엣지 지역**이라 우리 위치에 따라 정해진다.
프로젝트 설정이 아니다.

### ③ `_vercel` TXT 는 «도메인» 단위다

117곳 중 **2곳**에만 있고, 값이 도메인마다 다르다:

```
vc-domain-verify=pairfun.online,3d8f9cc11956bb90f4f5
vc-domain-verify=www.pairfun.online,8ae2ffb467cbbb5eccac
```

같은 도메인의 `www` 유무마저 값이 다르다. **계정을 안 가리킨다.**
(대조: `google-site-verification` 도 같은 이유로 축에서 뺐다 — `axes.js` REJECTED)

### ④ CNAME 없음

117곳 전부 CNAME 이 없다. A 레코드로 직접 붙어 있다.

### ⑤ 프로젝트 설정성 헤더도 다 봤다 — 없다

「CSP·쿠키는 프로젝트 설정이니 갈리지 않을까」를 확인했다. **안 갈린다 — 아무도 안 쓴다.**

| 헤더 | 있는 곳 | 값 종류 | 최다 |
|---|---:|---:|---:|
| `content-security-policy` | **1** | 1 | 1 |
| `set-cookie` | **1** | 1 | 1 |
| `permissions-policy` | 5 | 3 | 3 |
| `x-matched-path` · `x-nextjs-prerender` · `content-disposition` | 33~77 | 2 | 사실상 1종 |

`x-vercel-id` 도 조각별로 뜯었다 — `icn1::5bgrv-1788933668398-3d229cb35214` 에서
[1] 54종 · [2][3] 113/117 유일. **요청마다 바뀐다.** 앞의 `icn1` 은 응답을 처리한 엣지 지역이라
우리 위치가 정한다.

> **여기까지 다 봤다.** NS · 헤더 이름 · 헤더 값 · CSP · 쿠키 · TXT · CNAME · `x-vercel-id` 구조.
> 다시 파지 말 것.

### ⑥ Vercel NS 인데 Railway 가 서빙하는 곳이 있다

3곳에서 `x-hikari-trace` · `x-railway-edge` 헤더가 나왔다. 도메인만 Vercel DNS 에 두고
서버는 Railway 에 붙인 것이다. **`srv`(호스팅) 분류를 NS 기준으로 하면 이게 섞인다** —
`railway-hikari` 는 이 실험에서 AF 매수 상위 20% 진입률 ×2.42 로 유일하게 살아남은 신호였다.

## 3. 그래서 무엇을 쓰나 — 프로젝트 이름

Vercel 프로젝트를 만들면 `<프로젝트명>.vercel.app` 주소가 생기고,
나중에 커스텀 도메인을 붙인다. **`<link rel="canonical">` · `og:url` 을 안 고치면
그 주소가 HTML 에 그대로 남는다.**

```html
<!-- shushcat.fun 의 HTML -->
<link rel="canonical" href="https://neitherconfirmnordeny.vercel.app/">
<meta property="og:url" content="https://neitherconfirmnordeny.vercel.app/">
```

**도메인은 토큰마다 새로 사지만 프로젝트 이름은 바꿀 이유가 없다.** 그래서 습관이 남는다.

### 다만 이건 사업자가 준 값이 아니다

| | Cloudflare NS 쌍 | Vercel 프로젝트 이름 |
|---|---|---|
| 누가 정하나 | **Cloudflare** | 사람 |
| 나중에 바꿀 수 있나 | **못 바꾼다** (공식) | 바꿀 수 있다 |
| 근거 | 공식 문서 | 실측 뿐 |

**한 급 아래다.** 「이 값을 지울 수 없다」가 없으므로, 운영자가 마음먹으면 사라진다.

## 4. 실측 — 이걸로 실제로 갈렸다 (F-04)

376곳 전수 중 프로젝트 이름을 얻은 곳은 **40곳(10.6%)** 뿐이다. 못 얻은 이유:

```
213  vercel.app 참조 없음      canonical 을 고쳤거나 그 태그가 없다
 81  HTTP 404                 배포가 지워졌다
 17  HTTP 503 ·  7 HTTP 402   402 = 미납으로 Vercel 이 정지시킨 것
  8  TLS 인증서 도메인 불일치     도메인만 붙이고 설정을 안 끝냈다
  4  잘못된 응답 · 3 502 · 2 429 · 1 시간초과
```

이름으로 나누지 않고 **이미지 인코더 지문으로 묶은 뒤 이름을 읽었다**(사람이 만든
분류 규칙보다 도구가 남긴 값이 낫다). 결과:

```
18곳 한 덩어리   sig JPEG:A0:JFIF.A2:ICCPROF.DB.DB.A11:JP.C0 · hdr 1종 · 늙은계정 0/18
나머지 22곳      지문 14종에 각 1곳 — 전부 단독
```

18곳의 프로젝트 이름 중 **16개가 영어 문장**이다:

```
nobodylooksdown · neitherconfirmnordeny · youdidnotask · hehasnotmoved
heheardyouwrong · noneofthemfit · stopfeedinghim · itlandsasanything
donotlethimtouchit · halfofhimneverloads · youboughtthewrongone · everythingheowns
```

### 결정적인 대조

```
이 지문을 가진 Vercel 사이트        18  →  이름을 흘린 곳 18  (100%)
그 외 Vercel 사이트                310  →  이름을 흘린 곳 17  (5.5%)
이 무리의 응답 상태                 전부 성공 (404·402 하나도 없음)
```

**예외 없이 `canonical` 을 안 고친다.** 「같은 실수를 100% 반복한다」는 건
같은 템플릿을 복사해 쓴다는 뜻이다. 그 자체가 지문이다.

라벨은 `hdr+ns+sig` 서명(`kind: 'sig'`)으로 붙였다 — 이름을 안 흘린 4곳
(`codog.wtf` · `pimf.wtf` · `shirtlessdog.fun` · `vampcat.fun`)까지 잡아 **20곳**이 된다.
이름보다 서명이 넓게 맞는 게 맞다.

## 5. 다른 DNS 제공자 → [[dns-provider-axes]]

제공자별 판정표는 **[dns-provider-axes.md](./dns-provider-axes.md)** 로 옮겼다.
한 줄 요약: **NS 로 운영자를 가를 수 있는 건 Cloudflare 뿐이다.**
Vercel 은 NS 집합이 1종(376곳 전부 같음)이라 애초에 후보도 아니다.

## 6. 아직 모르는 것

- **Vercel 팀 슬러그를 얻을 방법.** 배포 URL 이 `<프로젝트>-<해시>-<팀>.vercel.app` 형태면
  팀 이름이 나오는데, 본문에 남은 건 전부 프로덕션 별칭(`<프로젝트>.vercel.app`)이라 팀이 없다
- **`canonical` 을 고친 213곳**에 같은 무리가 더 있는지. 지금 방법으로는 안 잡힌다
- ~~GoDaddy·Hostinger·NS1 의 NS 배정 정책~~ → 5절에서 검정 완료. 전부 무작위와 구분 안 됨

## 7. 갱신 이력

| 날짜 | 내용 |
|---|---|
| 2026-09-09 | 5절 정정. GoDaddy·Hostinger·NS1 을 「될 것 같다」로 적었다가 널 모델로 검정하니 **전부 무작위와 구분 안 됨**. 「NS 집합이 갈린다」는 축의 근거가 아니다 — GoDaddy 는 묶임률이 Cloudflare 보다 높은데도 그 묶임이 운영자와 무관하다. 2절에 CSP·쿠키·`x-vercel-id` 구조 전수 결과 추가 |
| 2026-09-09 | 최초 작성. 「Vercel 에서 고객마다 제공되는 값을 찾을 수 있나」를 확인하려 376곳을 전수 스캔했고, **없다**로 결론. 대신 프로젝트 이름 누출로 F-04(20곳)를 찾았다. 제공자별 NS 집합 종류를 같이 재서 «어디서 이 방법이 되는지» 표로 남겼다 |
