![[실전 SEO 13] 글마다 다른 설명문(meta description) 자동으로 만들기](https://img.thenullpage.com/posts/5570/5570_1_3e9be3.webp)
지금까지는 봇이 사이트를 잘 돌게 만드는 인프라 얘기였다. 이번 편부터는 페이지 안쪽, 즉 온페이지로 들어간다. 첫 주제는 설명문, meta description이다. 검색 결과에서 제목 아래 두어 줄로 뜨는 그 문장이다. 사소해 보이지만, 이게 게시판마다 똑같으면 구글이 아예 무시해버린다. 이번 편은 글마다 다른 설명문을 자동으로 만드는 법이다.
설명문은 순위를 직접 올리는 요소는 아니다. 하지만 검색 결과에서 사람이 클릭할지 말지를 가르는 결정적 문장이고, 클릭률은 다시 순위에 영향을 준다. 그래서 온페이지의 첫걸음으로 다룰 만한 가치가 충분하다.
1. 설명문은 무엇을 하는가
meta description은 head에 들어가는 짧은 문장으로, 검색 결과의 스니펫 후보가 된다. 구글이 반드시 이 문장을 쓰는 건 아니지만, 적절하면 그대로 써주고 아니면 본문에서 알아서 발췌한다. 즉 이 문장은 내가 검색 결과에 걸고 싶은 광고 문구를 미리 제안하는 자리다.
여기서 핵심은 이 문장이 순위 신호가 아니라 클릭 신호라는 점이다. 키워드를 욱여넣는다고 순위가 오르지 않는다. 대신 이 글을 클릭하면 무엇을 얻는지가 분명하면 사람이 누른다. 그래서 설명문은 검색엔진이 아니라 사람을 향해 써야 한다.
제목과의 역할 분담도 중요하다. 제목이 무엇에 관한 글인지를 한 줄로 말한다면, 설명문은 그래서 뭘 알 수 있는지를 두어 줄로 보충한다. 제목과 똑같은 말을 반복하면 낭비다. 제목이 못 담은 구체적 이득을 설명문이 채워야 한다.
한 가지 더 짚으면 설명문의 길이는 픽셀 기준으로 잘린다는 점이다. 글자 수로 대략 150자 안팎이라고 하지만 실제로는 화면 폭에 따라 잘리는 위치가 다르고, 특히 모바일에선 더 짧게 잘린다. 그래서 정말 중요한 메시지는 앞쪽에 배치하는 게 안전하다. 뒤에 붙인 좋은 말은 잘려서 안 보일 수 있다.
조금 더 배경을 주면, 검색 결과에서 사용자가 실제로 읽는 건 제목과 이 설명문 두 줄이 거의 전부다. 본문은 클릭한 뒤에야 보인다. 그러니 설명문은 본문의 요약이라기보다 클릭을 부르는 예고편에 가깝다. 무슨 내용인지 다 말해버리기보다, 클릭하면 무엇을 얻는지를 분명히 하는 쪽이 클릭률에 유리하다.
2. 똑같은 설명문의 함정
가장 흔하고 치명적인 실수가, 사이트 전체나 게시판 전체에 같은 설명문을 박아두는 것이다. 예컨대 모든 글의 설명문이 우리 커뮤니티에 오신 것을 환영합니다 같은 고정 문구면, 구글은 수천 개 페이지가 똑같은 설명을 달고 있다고 보고 그 설명을 통째로 무시한다.
더 나쁜 건, 중복 설명문이 많으면 그 자체가 페이지들이 서로 비슷하다는 인상을 준다는 것이다. 얇고 중복된 사이트라는 신호로 이어질 수 있다. 앞 편들에서 다룬 크롤링됨-색인 안 됨이 이런 사이트에서 잘 쌓인다.
그래서 원칙은 명확하다. 설명문은 글마다 달라야 한다. 수백, 수천 개 글에 사람이 일일이 쓸 수는 없으니, 본문에서 자동으로 뽑아 만드는 파이프라인이 필요하다. 관건은 어떻게 잘 뽑느냐다.
중복 설명문 문제는 특히 목록 페이지와 페이지네이션에서 심하다. 1페이지, 2페이지가 다 같은 게시판 설명을 달고 있으면 그것들끼리 중복이 된다. 그래서 목록 페이지의 설명문에는 몇 페이지인지나 어떤 분류인지 같은 맥락을 넣어 서로 구분되게 하거나, 아예 목록은 설명문에 덜 신경 쓰고 개별 글에 집중하는 전략을 쓴다.
3. 본문에서 자동으로 뽑기
가장 실용적인 방법은 글 본문의 앞부분을 가져와 설명문으로 쓰는 것이다. 보통 첫 문단이나 앞 150자 안팎을 발췌한다. 사람이 글을 쓸 때 앞부분에 요지를 담는 경향이 있어서, 이 방식만으로도 글마다 다른 그럴듯한 설명문이 자동으로 만들어진다.
길이는 대략 150자 안팎이 무난하다. 너무 길면 검색 결과에서 잘리고, 너무 짧으면 정보가 부족하다. 발췌할 때 문장 중간에서 뚝 끊기지 않게 문장 경계에서 자르거나, 자연스러운 지점에서 마무리하는 처리를 넣으면 완성도가 올라간다.
HTML 본문에서 뽑을 때는 태그를 제거하고 순수 텍스트만 남겨야 한다. 이미지나 링크 태그가 섞여 들어가면 깨진 설명문이 된다. 태그를 걷어내고, 여러 줄바꿈을 정리하고, 앞뒤 공백을 다듬는 기본 처리를 거친 뒤 발췌하는 게 좋다.
자동 발췌를 구현할 때 서버에서 처리할지 클라이언트에서 처리할지도 정해야 한다. 설명문은 봇이 즉시 읽어야 하는 head 정보라, 반드시 서버 응답에 담겨 나와야 한다. 자바스크립트로 나중에 넣으면 봇이 못 볼 수 있다. 본문 데이터를 이미 서버가 갖고 있으니, 그 자리에서 발췌해 head에 심어 보내는 게 정석이다.
구현 디테일 하나를 더 보태면, 발췌 결과를 그대로 쓰기 전에 HTML 엔티티 처리를 해줘야 한다. 따옴표나 부등호 같은 특수문자가 그대로 들어가면 마크업이 깨질 수 있다. 그래서 발췌 텍스트를 설명문 속성에 넣기 전에 이스케이프 처리를 거치는 게 안전하다. 자동화 파이프라인에서 이런 잔처리를 빼먹으면 특정 글에서만 설명문이 깨진다.
4. 뽑을 때 걸러야 할 것들
자동 발췌의 함정은 앞부분이 항상 설명에 적합하진 않다는 데 있다. 예컨대 본문이 ㅋㅋㅋ 같은 감탄사나 짧은 반응으로 시작하거나, 이미지 한 장으로 시작하거나, 인용문으로 시작하면 그걸 그대로 설명문에 쓰면 곤란하다. 이런 경우를 걸러내는 규칙이 필요하다.
내가 쓴 방식은 이렇다. 발췌한 텍스트가 너무 짧거나, 의미 없는 반복 문자로 시작하거나, 추출 결과가 비면 그 글은 게시판 기본 설명문으로 대체한다. 다만 그 기본 문구도 게시판별로는 다르게 둬서 완전한 중복은 피한다. 무리하게 이상한 발췌를 쓰느니 깔끔한 기본값이 낫다.
또 하나, 발췌 텍스트에 개인정보나 부적절한 표현이 앞부분에 있으면 그게 검색 결과에 노출된다. 민감한 패턴을 거르는 최소한의 필터도 넣어두는 게 안전하다. 설명문은 사이트가 검색 결과에 내거는 얼굴이라, 아무 문장이나 내보내면 안 된다.
거를 것 이야기를 조금 더 하면, 본문이 링크나 해시태그의 나열로 시작하는 경우도 흔하다. 출처 링크만 잔뜩 붙은 도입부를 그대로 발췌하면 설명문이 주소 덩어리가 된다. 그래서 순수 텍스트 비율이 일정 수준 이하이거나 링크 위주면 발췌를 건너뛰고 기본값으로 넘기는 조건을 넣는 게 좋다. 발췌는 되는 대로가 아니라 골라서 해야 한다.
5. 구글이 내 설명문을 무시할 때
공들여 설명문을 만들어도, 구글이 그걸 안 쓰고 본문에서 다른 부분을 발췌해 보여줄 때가 많다. 이건 실패가 아니다. 구글은 검색어에 따라 그 질문에 가장 잘 답하는 본문 조각을 골라 스니펫으로 쓰기 때문이다. 검색어가 다양하면 같은 글이라도 그때그때 다른 스니펫이 뜬다.
그래서 설명문에 너무 집착할 필요는 없다. 잘 만든 설명문은 구글이 마땅한 발췌를 못 찾았을 때의 좋은 기본값이 되어주고, 본문 자체가 충실하면 구글이 상황에 맞는 스니펫을 알아서 잘 뽑아준다. 결국 설명문 최적화의 8할은 본문을 잘 쓰는 것이다.
정리하면 설명문은 글마다 다르게, 사람을 향해, 본문 앞부분에서 자동으로 뽑되 예외를 거르는 것. 이 파이프라인 하나로 수천 개 글의 스니펫이 살아난다. 다음 편에서는 검색 결과를 더 풍성하게 만드는 구조화 데이터, JSON-LD를 다룬다.
마지막으로 설명문과 본문 첫 문단이 똑같아도 괜찮다. 오히려 첫 문단이 요지를 잘 담고 있으면 그걸 설명문으로 쓰는 게 자연스럽다. 중요한 건 페이지 간에 다르냐이지 한 페이지 안에서 설명문과 본문이 겹치냐가 아니다. 겹침을 피하려고 억지로 다른 문장을 지어내면 오히려 어색해진다. 자연스러운 발췌가 인위적 문구보다 낫다.
끝으로 강조하면, 설명문 최적화에 시간을 많이 쓸 필요는 없다. 글마다 다르게 자동 생성되고, 앞부분이 이상한 글만 걸러지면 충분하다. 남는 힘은 본문의 품질에 쓰는 게 낫다. 본문이 좋으면 구글이 검색어마다 알맞은 스니펫을 알아서 만들어주기 때문이다. 설명문은 기본값, 본문이 본진이다.
마지막으로 하나 더, 설명문은 언어별로도 관리해야 한다. 다국어 사이트라면 한국어 페이지엔 한국어 설명문이, 영어 페이지엔 영어 설명문이 붙어야 한다. 본문에서 자동 발췌하면 이건 자연히 해결되지만, 고정 문구를 쓰는 부분이 있다면 언어별로 분리해야 한다. 엉뚱한 언어의 설명문이 붙으면 클릭률은 물론 신뢰도까지 떨어진다.