크롤 예산 낭비 막으려 폰트 경로를 검색 봇 차단 목록에 추가
목차
robots.ts 에서 폰트 정적 파일 경로를 Disallow 에 추가한 작업.
작업 자체는 딱 한 줄 수준의 변경이지만, 이게 왜 필요했는지를 제대로 이해하려면 Next.js의 정적 자산 서빙 구조와 SEO 크롤러의 동작 방식을 같이 봐야 한다.
왜 폰트 파일 경로를 막아야 했나
Next.js는 빌드 시 폰트 파일을 포함한 정적 자산을 /_next/static/media/ 하위에 해시 붙은 파일명으로 뱉어낸다. Inter.woff2 같은 파일이 /_next/static/media/abc123def456.woff2 형태로 올라가는 식이다.
문제는 Googlebot을 비롯한 크롤러가 이 경로를 실제로 순회하려 들 수 있다는 점이다. 기술적으로 막혀 있는 건 아니니까. 크롤러 입장에선 /_next/static/media/ 아래 URL들이 크롤 예산(crawl budget)을 잡아먹는 노이즈 URL이 된다.
특히 크롤 예산이 민감한 서비스라면 이 문제가 체감으로 나타난다. 크롤러가 .woff, .woff2, .ttf 같은 바이너리 파일을 긁어봤자 인덱싱할 수 있는 콘텐츠가 아닌데, 그 요청 횟수가 실제 페이지 크롤에 쓰일 예산을 갉아먹는다.
// before — /_next/static/media/ 경로에 대한 처리 없음
export default function robots() {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: ['/api/', '/_next/static/chunks/'],
},
sitemap: 'https://example.com/sitemap.xml',
};
}
// after — 폰트 파일 경로 명시적 차단
export default function robots() {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: [
'/api/',
'/_next/static/chunks/',
'/_next/static/media/',
],
},
sitemap: 'https://example.com/sitemap.xml',
};
}
robots.ts 한 파일이 갖는 책임
Next.js 13+ App Router에서 src/app/robots.ts는 /robots.txt를 동적으로 생성하는 파일이다. 정적 public/robots.txt를 쓰는 대신 이걸 쓰면 환경변수 분기나 도메인별 처리가 가능해서 프로덕션/스테이징 구분도 깔끔하게 된다.
그 특성상 이 파일 하나의 변경이 사이트 전체 크롤 정책에 영향을 준다. 팀 리뷰에서 내가 항상 강조하는 부분이 여기다. robots.ts 수정 PR은 작은 diff라도 반드시 검색 노출 영향 관점에서 한 번 더 보자고 한다.
실수로 allow: '/' 를 지워버리거나, Disallow: / 로 잘못 쓰면 사이트 전체가 인덱스에서 빠지는 사고가 난다. 이런 류의 수정은 코드 라인 수는 적어도 영향 반경이 넓다.
정적 자산 경로 차단 — 어디까지가 적절한가
| 경로 | 차단 권장 | 이유 |
|---|---|---|
/_next/static/media/ |
✅ | 폰트/이미지 바이너리, 인덱싱 불필요 |
/_next/static/chunks/ |
✅ | JS 번들, 크롤 대상 아님 |
/_next/static/css/ |
선택적 | CSS도 크롤 불필요하나 명시 안 해도 크게 무해 |
/_next/image |
상황따라 | OG 이미지 등 노출 필요한 경우 있음 |
/api/ |
✅ | API 엔드포인트 노출 방지 |
/_next/static/media/를 통째로 막는 게 맞는 방향이긴 한데, 간혹 이 경로 아래 에셋이 직접 링크되어 SEO에 관여하는 경우가 있는지 먼저 확인하는 게 좋다. 이번 케이스는 폰트 파일만 해당됐기 때문에 막는 게 명확히 옳았다.
핀포인트 수정이지만, 왜 했는지 / 안 했을 때 어떤 부작용이 있는지를 팀이 같이 이해하는 게 중요하다. 다음 번에 누군가 robots.ts를 건드릴 때 "폰트 경로 왜 막혀 있지?" 하고 지웠다가 원점으로 돌아가는 상황을 막으려면, PR 설명이나 코드 주석에 의도를 한 줄이라도 남겨두는 게 맞다. 이번엔 그렇게 했다.
끝.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.