콘텐츠로 건너뛰기

[블로그운영] 워드프레스 캐시 때문에 새 글이 홈에만 안 보일 때

글을 발행했는데 카테고리 페이지에는 있고 홈에는 없습니다. 브라우저를 새로고침해도 그대로입니다.

정리하는 개발자 워니즈입니다. 이 글에서는 이 증상의 원인을 워드프레스 캐시로 확정하는 방법과, 제가 오늘 실제로 잰 숫자를 다룹니다.

결론부터 말씀드리면 대부분 워드프레스 캐시 플러그인이 홈을 안 비운 것입니다. 글을 다시 저장하기 전에, 같은 주소를 캐시 우회로 한 번 더 받아서 두 응답을 비교하십시오.

워드프레스 캐시본과 우회본 응답 비교 실측

워드프레스 캐시는 왜 홈만 낡게 두는가

워드프레스 캐시 플러그인은 페이지 단위로 결과물을 저장해둡니다. 글이 하나 올라오면 그 글이 실리는 모든 페이지가 낡은 상태가 됩니다. 홈, 카테고리, 태그, 아카이브, 사이트맵이 전부 해당됩니다.

문제는 플러그인이 이걸 전부 알아서 지워주지 않는다는 데 있습니다. 제 경우 카테고리 페이지에는 캐시가 걸려 있지 않았고 홈에만 걸려 있었습니다. 그래서 카테고리로 들어가면 새 글이 보이고 홈에서는 안 보이는 정확히 그 증상이 나왔습니다.

여기서 많이들 글을 다시 저장하거나 발행을 취소했다 다시 합니다. 그러면 원인이 캐시였는지 글이었는지 영영 모르게 됩니다.

1. 워드프레스 캐시 문제인지부터 가릅니다

판정은 요청 두 번이면 끝납니다. 같은 주소를 그냥 한 번, 쿼리스트링을 붙여 한 번 받습니다. 쿼리스트링이 붙으면 대부분의 캐시 플러그인이 저장본을 건너뜁니다.

curl -s https://example.com/ | grep -c "새-글-슬러그"
curl -s "https://example.com/?nocache=1" | grep -c "새-글-슬러그"

앞이 0이고 뒤가 1 이상이면 글에는 아무 문제가 없습니다. 캐시가 낡은 것입니다.

저는 최근 글 4편으로 이걸 재봤습니다.

구분최근 글 4편 노출응답 크기
홈 캐시본0건97,193 bytes
홈 캐시 우회본4건 전부102,564 bytes

크기가 5,371 bytes 차이 납니다. 딱 글 4편이 들어갈 만큼입니다. 이 정도면 추측이 아니라 판정입니다.

2. 워드프레스 캐시를 비우는 방법

여기서 캐시 디렉터리를 통째로 지우고 싶어집니다. 권하지 않습니다. 플러그인이 관리하는 인덱스 파일까지 같이 날아가면 그 다음 동작이 예측 불가능해집니다.

플러그인이 제공하는 함수를 쓰는 편이 안전합니다. WP Fastest Cache 라면 이렇게 됩니다.

wp eval 'wpfc_clear_all_cache(true);'

WP-CLI 가 없는 환경이라면 관리자 화면에도 같은 버튼이 있습니다. 저는 이 한 줄로 49MB 를 비웠고, 직후 홈에서 4편이 전부 나왔습니다.

3. 다음부터 안 겪으려면

한 번 겪었다면 다음에도 겪습니다. 발행 절차 안에 넣어야 안 겪습니다.

저는 발행 뒤에 두 줄을 붙였습니다. 캐시를 비우고, 홈 HTML 에 새 글 슬러그가 실제로 있는지 확인합니다. 확인까지 해야 의미가 있습니다. 비우는 명령이 성공했다는 것과 홈에 글이 실렸다는 것은 다른 사실입니다.

wp eval 'wpfc_clear_all_cache(true);'
curl -s https://example.com/ | grep -q "새-글-슬러그" && echo OK || echo FAIL

이런 식으로 규칙을 절차에 박아두는 방식은 발행 전 검사를 자동화한 기록에서도 같은 방법을 썼습니다. 기억해서 지키는 규칙은 반드시 새어 나갑니다.

4. 캐시가 아니었다면 볼 곳

우회본에서도 새 글이 안 보인다면 캐시 문제가 아닙니다. 그때는 순서대로 봅니다.

  1. 글 상태가 발행인지 예약인지 확인합니다. 예약 시각이 미래면 목록에 안 나옵니다
  2. 홈에 뿌리는 글 수 설정을 확인합니다. 고정 글이 앞을 차지하면 밀려납니다
  3. 카테고리가 홈에서 제외되도록 설정돼 있는지 봅니다
  4. 테마나 플러그인이 홈 쿼리를 바꾸고 있는지 봅니다

이 중 하나에 걸리는 경우가 대부분이고, 캐시와 달리 설정 화면에서 바로 보입니다.

5. 검색엔진 쪽도 같이 봅니다

홈이 낡아 있으면 크롤러도 낡은 홈을 봅니다. 새 글로 가는 링크가 없는 상태로 수집되니 발견이 늦어집니다. 구글도 크롤링 가능한 링크를 발견 경로로 설명합니다.

내부 링크가 부실하면 이 지연이 더 커집니다. 저는 216편 중 45%가 아무 링크도 받지 못하는 상태였는데, 그 전수 조사는 내부 링크 고아 페이지 기록에 적어뒀습니다. 새 글이 홈에서도 빠지고 다른 글에서도 링크를 못 받으면 사실상 아무 데도 연결되지 않은 글이 됩니다.

자주 묻는 것

Q. 브라우저 새로고침으로는 왜 안 되나요.

캐시는 서버에 있습니다. 브라우저 캐시를 비워도 서버가 같은 저장본을 그대로 내려줍니다. 시크릿 창도 마찬가지입니다.

Q. 카테고리에서는 왜 보였나요.

그 페이지에 캐시가 안 걸려 있었기 때문입니다. 캐시 대상은 플러그인 설정과 접근 빈도에 따라 달라져서, 같은 사이트 안에서도 페이지마다 상태가 다릅니다.

Q. 워드프레스 캐시를 아예 끄면 되지 않나요.

끄면 이 문제는 사라지지만 응답이 느려집니다. 저사양 서버라면 체감 차이가 큽니다. 끄는 대신 발행 직후 비우는 절차를 넣는 편이 낫습니다.

정리

  1. 홈에만 안 보이면 먼저 워드프레스 캐시를 의심합니다
  2. 같은 주소를 캐시 우회로 한 번 더 받아 두 응답을 비교합니다
  3. 응답 크기와 글 노출 건수가 갈리면 캐시가 낡은 것입니다
  4. 디렉터리를 지우지 말고 플러그인 함수로 비웁니다
  5. 비운 뒤 홈 HTML 에 슬러그가 있는지까지 확인합니다

오늘 할 것 하나만 고르라면, 방금 올린 글의 슬러그로 홈을 한 번 grep 해보십시오. 조회수가 안 나오는 이유가 여기 있을 수 있습니다. 조회수를 방문자 수와 나눠 보는 방법은 세션당 페이지수 기록에 정리해뒀습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다