← 전체 글로 돌아가기

Next.js

사이드 프로젝트 공개 전 점검한 SEO와 보안 체크리스트

작은 웹 서비스를 공개하기 전 검색 노출, 오류 페이지, 비밀값, 헤더를 함께 확인한 실전용 사전 점검표입니다.

공개 버튼을 누르기 전 멈춘 이유

새 서비스의 기능은 모두 동작했지만 공개 직전에 미리보기 URL이 검색 결과에 노출되고, 존재하지 않는 경로가 200 응답을 반환하는 것을 발견했습니다. 기능 테스트만 통과하면 출시할 수 있다고 생각했던 판단을 고쳤습니다.

초보 단계에서는 SEO와 보안을 별개 작업으로 보기 쉽습니다. 실제로는 잘못된 canonical, 공개된 소스맵, 상세한 오류 메시지가 같은 배포 설정에서 함께 생길 수 있습니다.

검색 로봇이 보는 화면

다음 항목을 브라우저와 명령줄에서 확인했습니다.

curl -I https://example.com/
curl -fsS https://example.com/robots.txt
curl -fsS https://example.com/sitemap.xml
curl -s -o /dev/null -w '%{http_code}
' https://example.com/not-found-test

페이지별 title과 description이 중복되지 않는지, canonical이 실제 공개 URL을 가리키는지 확인했습니다. 로그인 뒤에만 볼 수 있는 페이지에는 noindex를 적용했지만, robots.txt만으로 비공개가 된다고 착각하지 않았습니다.

비밀값과 오류 응답

배포 이미지에 .env가 들어갔는지와 클라이언트 번들에 비밀 키가 포함되지 않았는지를 확인했습니다. 저장소 검색만 하지 않고 빌드 산출물도 검사했습니다.

git status --short
find .next -type f -print0 | xargs -0 grep -Il 'sk_live_\|BEGIN PRIVATE KEY' || true
docker image history app:release

발견한 키가 있다면 파일에서 지우는 것으로 끝내지 않고 즉시 폐기하고 새 키를 발급해야 합니다. API 오류는 사용자에게 내부 경로와 SQL 문장을 보여 주지 않도록 일반 메시지로 바꿨습니다.

마지막 15분 점검표

  • HTTPS 리다이렉트와 보안 헤더가 동작한다.
  • 관리자·미리보기 경로가 검색 색인 대상이 아니다.
  • 404와 500 화면이 상태 코드도 올바르게 반환한다.
  • sitemap에 공개 글만 들어 있다.
  • 소스맵과 환경변수에 비밀정보가 없다.
  • 로그에 토큰, 쿠키, 비밀번호가 남지 않는다.
  • 백업과 롤백 방법을 실제 명령으로 적어 두었다.

출시 후에 볼 숫자

공개 직후에는 검색 순위보다 오류율, 404 비율, 서버 디스크, 인증 실패 횟수를 먼저 봅니다. SEO는 검색엔진에 잘 보이는 것만이 아니라 올바른 페이지를 올바른 사람에게 보여 주는 운영 문제이기도 합니다. 체크리스트를 저장소에 남겨 다음 배포 때 그대로 재사용할 수 있게 한 것이 이번 작업의 가장 큰 수확입니다.