답변
먼저 소프트 404가 무엇인지 정확히 짚어야 대량 발생 원인을 잡을 수 있습니다. 소프트 404는 사용자에게는 '페이지 없음'처럼 보이는 화면을 보여주면서 서버는 200(성공) 코드를 그대로 응답하는 URL을 말합니다. 이건 서버 설정 오류가 아니라 구글이 페이지 콘텐츠(빈 본문, '상품 없음' 문구, 텅 빈 목록 등)를 분석해서 알고리즘적으로 자동 판정하는 것이라, 개발자가 의도치 않게 대량으로 만들어버리는 경우가 많습니다. 커머스 사이트에서 특히 흔한 3가지 원인이 있습니다. ① 재고 0개 상품의 URL은 살려두고 '상품이 없습니다' 안내만 띄우면서 서버는 여전히 200을 응답하는 경우, ② 검색·필터 결과가 0건일 때 결과 없음 페이지가 200으로 응답하는 경우, ③ CMS나 프레임워크의 커스텀 404 템플릿이 실제로는 200 헤더를 내보내도록 잘못 설정된 경우입니다. 서치콘솔의 색인 생성 보고서에서 소프트404로 잡힌 URL들을 몇 개 열어 위 세 유형 중 어디에 해당하는지 먼저 분류하세요. 해결은 응답 코드 자체를 강제로 바로잡는 것입니다. 상품이 존재하지 않는 URL은 다시 판매될 가능성이 있으면 404, 영구 삭제가 확정됐으면 410을 반환하도록 라우팅 로직을 수정하세요. Node.js/Express 계열이면 `res.status(404).render(...)`처럼 상태 코드를 명시적으로 지정해야 하고, Next.js라면 `getStaticProps`/`getServerSideProps`에서 `notFound: true`를 반환하면 프레임워크가 자동으로 404 상태 코드를 붙여줍니다. 유사 상품 추천 같은 대체 콘텐츠를 화면에 보여주는 것 자체는 문제가 없습니다 — 핵심은 화면 내용과 무관하게 HTTP 상태 코드는 반드시 404/410으로 유지해야 소프트404 경고가 실제로 사라진다는 점입니다.