워드프레스 노엔덱스 관리는 어떻게 하는게 좋을까
“인덱스 선택” 기능 — 아카이브 페이지만 골라 노인덱스 처리하고 글·페이지는 절대 건드리지 않는 안전장치
지난 두 편에서 구조화 데이터와 max-image-preview:large를 다뤘다.
이 둘은 “글을 어떻게 더 잘 보이게 할 것인가”의 문제였다. 이번 글은 반대다. “무엇을 검색에서 빼야 하는가”의 문제, 인덱스 선택 기능을 다룬다.

왜 뭔가를 빼야 하는가
워드프레스는 기본적으로 관대하다.
날짜별 아카이브, 태그 아카이브, 작성자 아카이브, 검색 결과 페이지까지 전부 색인 가능한 상태로 열어둔다.
문제는 이런 페이지들 대부분이 실제 콘텐츠가 아니라는 데 있다. “2026년 6월”이라는 날짜 아카이브 페이지를 열어보면, 그냥 그 달에 쓴 글 목록이 나열돼 있을 뿐이다.
나는 이걸 콘텐츠 품질 신호가 희석되는 문제로 본다. 그래서 필요 없는 페이지는 명시적으로 빼줘야 한다.
절대 규칙부터 정했다
이 기능을 설계하면서 나는 가장 먼저 “무엇을 절대 건드리면 안 되는가”부터 정했다.
개별 글과 고정 페이지다. 어떤 설정 조합으로도 이 둘은 노인덱스 처리될 수 없다.
is_singular()로 확인해서 참이면, 이후에 어떤 설정값이 뭐라고 돼 있든 무조건 그대로 통과시킨다. 이 조기 반환보다 먼저 실행되거나 이를 우회할 수 있는 코드는 파일 안 어디에도 없다.왜 이렇게까지 엄격하게 만들었는가. 나는 이게 SEO 플러그인이 가질 수 있는 가장 위험한 실수 지점이라고 본다.
설정 화면을 잘못 클릭하거나, 체크박스 여러 개를 조합하다가 실수로 전체 글이 노인덱스 처리되는 사고를 여러 번 들어봤다. 검색 유입이 하루아침에 0에 가까워지는 사고다.

복구도 오래 걸린다. 나는 이런 사고가 구조적으로 아예 불가능하게 만들고 싶었다.
그래서 옵션값을 검증하는 방식이 아니라, “글과 페이지는 이 필터 진입 자체를 건너뛴다”는 방식으로 만들었다. 사용자가 뭘 어떻게 설정하든 상관없다. 대상 자체가 다르다.
이 기능이 다룰 수 있는 대상은 딱 정해져 있다.
날짜·월별 아카이브, 태그 아카이브, 작성자 아카이브, 검색결과 페이지, 홈(블로그 목록) 2페이지 이상, 그리고 사용자가 명시적으로 선택한 카테고리 아카이브. 전부 “목록성” 페이지다. 실제 창작물이 아니라 창작물을 모아 보여주는 페이지만 대상으로 삼았다.
robots.txt가 아니라 meta noindex를 쓴 이유
방식도 신중하게 골랐다.
크롤링 자체를 막는 robots.txt 방식을 쓰지 않고, <meta name="robots" content="noindex"> 태그만 쓴다.
이유는 역설적이다. robots.txt로 막으면 구글이 그 페이지를 아예 재방문하지 못한다.
결과적으로 이미 색인된 문제의 페이지가 오히려 영원히 색인에 남아있게 되는 역설이 생긴다.
구글이 계속 방문해서 지시를 확인할 수 있으므로, 이미 문제가 된 페이지를 실제로 색인에서 빼내는 데는 이 방식이 맞다.
세 번의 시행착오를 거쳐서야 지금 구조가 나왔다
여기서 하나 솔직하게 얘기하고 싶은 게 있다. 지금의 “종류당 3택 1” 구조는 처음부터 이렇게 만든 게 아니다. 세 번을 고쳤다.
처음 버전은 홈·카테고리·태그·날짜·작성자·검색을 체크박스 하나로 뭉뚱그려서 켜고 껐다. 써보니 문제였다. 사용자마다 원하는 범위가 다른데, 종류별로 따로 고를 수 없었다.
두 번째 버전은 랭크매스의 “Archive Subpages” 기능을 참고해서 6개 체크박스로 쪼갰다. 이번엔 다른 문제가 생겼다.
날짜·작성자·태그·검색 네 종류에서 “전체 노인덱스”와 “페이지네이션만 노인덱스”가 완전히 별개의 체크박스로 존재했다. 둘 다 켜면 뒤쪽 체크박스가 아무 효과도 없는 죽은 스위치가 됐다.
전체를 이미 노인덱스했으면, 그중 2페이지 이상도 당연히 이미 포함돼 있으니까. 사용자 입장에서는 체크박스 두 개를 다 켰는데 하나가 아무 의미 없다는 걸 알 방법이 없었다.
지금의 세 번째 버전에서는 “종류당 하나의 설정”이라는 원칙으로 다시 정리했다.
날짜, 작성자, 태그, 검색 각각에 라디오 버튼 3택 1을 뒀다. 색인 유지, 전체 노인덱스, 2페이지 이상만 노인덱스. 한 항목이 세 상태 중 하나만 가질 수 있으니, 구조적으로 중복이 발생할 수 없다.
체크박스 두 개의 네 가지 조합 중 하나가 죽은 스위치가 되는 문제 자체가 애초에 생길 수 없는 구조로 바꾼 것이다.
홈페이지는 절대 전체를 빼지 않는다
카테고리는 조금 다르게 처리했다. 기존의 “직접 선택” 방식을 유지하고, 그 아래에 “선택하지 않은 카테고리는 2페이지 이상만 노인덱스”라는 옵션을 별도로 추가했다.
그리고 홈, 즉 블로그 목록에는 아예 “전체 노인덱스” 옵션 자체를 만들지 않았다.
2페이지 이상만 노인덱스하는 옵션만 뒀다.
나는 이걸 확인하고, 아예 선택지 자체를 없애기로 했다. 사용자가 실수로라도 누를 수 없게 만드는 게, 경고 문구를 띄우는 것보다 확실하다고 봤다.
미래의 카테고리까지 자동으로 커버한다
이 기능을 만들면서 나중에 발견한 허점이 하나 더 있었다.
카테고리는 “직접 선택”한 것만 적용됐는데, 이러면 새 카테고리를 만들 때마다 관리자가 매번 설정 화면에 가서 체크해야 했다.
이건 이 사이트만 쓰는 플러그인이 아니라 서로 다른 테마를 쓰는 여러 사이트에서 쓰여야 한다는 걸 생각하면 분명한 결함이었다.
그래서 카테고리 아카이브에도 날짜·작성자·태그·검색과 똑같은 3택 1 구조를 추가했다.
“전체”나 “페이지네이션”을 고르면 지금 있는 카테고리는 물론 앞으로 새로 만드는 카테고리까지 자동으로 적용된다. 개별로 매번 체크할 필요가 없어진다.
커스텀 택소노미 아카이브도 다섯 번째 종류로 똑같이 추가했다.
워드프레스 코어의 is_tax()는 카테고리와 태그를 제외한 나머지 택소노미에서만 참이 되므로, 기존 설정과 절대 겹치지 않는다.
커스텀 택소노미가 없는 사이트에서는 이 설정 자체가 그냥 아무 효과가 없다.

예전 설정을 저장한 사용자도 그대로 이어지게
구조를 세 번이나 바꿨다는 건, 예전 버전에서 이미 설정을 저장해둔 사용자들이 있다는 뜻이다.
나는 이 사람들의 설정이 업데이트 한 번으로 갑자기 바뀌는 걸 원치 않았다.
그래서 새 코드가 옛날 옵션 키를 읽어서 자동으로 새 형식으로 환산하게 만들었다.
“전체”와 “페이지네이션”이 둘 다 켜져 있던, 바로 그 시행착오 상태였던 사용자는 ‘full’로 정리했다.
실제 라이브에서 이미 전체 노인덱스로 동작하고 있었으니, 마이그레이션 과정에서 서빙 결과가 갑자기 바뀌는 일이 없도록 한 것이다.
저장 버튼을 한 번 누르면 새 스키마로 다시 저장되고, 그 이후로는 옛 키가 더 이상 쓰이지 않는다.
노인덱스 관리방법의 결론
인덱스 선택 기능은 화려한 신기능이 아니다.
검색에 나올 필요가 없는 목록성 페이지를 정확히 골라서 빼주는, 기본적이지만 실수하면 치명적인 기능이다.
나는 이 기능을 만들면서 두 가지를 절대 원칙으로 삼았다.
다음 글에서는 robots.txt와 meta noindex의 차이를 더 파고들어서, 이미 색인된 페이지를 실제로 빼내는 올바른 방법이 무엇인지 다룬다.

이 글은 DECOBLOCKS 플러그인이 적용되어 있습니다.