개발 slecs

크롤 예산 낭비 막으려 폰트 경로를 검색 봇 차단 목록에 추가

목차

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

첫 댓글 달아줘.