워드프레스에서 댓글 길이 제한 설정으로 스팸 차단하는 법

Last Updated: 2025년 06월 12일 댓글

워드프레스 블로그에는 하루에 수 십 개의 스팸 댓글이 달리고 있습니다. 많을 때에는 100개가 넘어가기도 합니다. 저는 모든 댓글을 휴지통으로 이동시킨 다음, 정상적인 댓글만 복원하고 나머지는 영구적으로 삭제하고 있습니다.

이와 함께 댓글 길이가 5단어 이상 250단어 이하일 때에만 댓글이 달리도록 코드를 추가했습니다. 일부 스팸 댓글의 길이가 너무 길어서 삭제하는 것이 불편하여 최대 글자 길이 제한을 설정했으며, 일부 스팸 댓글은 내용이 없거나 1~2 단어로 되어 있는 경우가 있어서 최소 길이도 제한했습니다.

5단어 이상일 때만 댓글이 제출되도록 했지만 최근 들어 내용이 없는 빈 댓글이 달리는 현상이 발생했습니다. 이와 관련하여 리서치를 해보니 보이지 않는 태그 때문에 그런 현상이 발생할 수 있다고 하네요. 그래서 태그를 삭제한 상태에서 댓글 길이를 체크하도록 코드를 수정했습니다.😄

워드프레스에서 댓글 길이 제한 설정으로 스팸 차단하는 법

워드프레스에서 댓글 길이 제한 설정으로 스팸 차단하는 법 (빈 댓글이 달리지 않도록 하기)

워드프레스 사이트 방문자가 늘어나면 스팸 댓글도 덩달아 늘어나게 됩니다. 특히 챗GPT 등 AI를 이용한 댓글도 증가하고 있습니다.

스팸 댓글은 비단 워드프레스만의 문제가 아닙니다. 티스토리에서도 지난 몇 년 사이에 아무 의미 없는 스팸 댓글이 많이 달리고 있습니다. 티스토리에서 스팸 필터 기능을 제공하지만 제 티스토리 블로그에는 그러한 스팸 필터를 뚫고 매일 여러 개의 댓글이 달리고 있네요.😄

저는 모든 댓글을 휴지통으로 이동시키고 정상적인 댓글만 복구하는 방법을 이용하고 있습니다.

그리고 댓글 길이가 5단어 미만이거나 250단어를 초과하는 경우에는 댓글 자체가 달리지 않도록 코드를 추가했습니다. 댓글 내용을 입력할 때 댓글 길이를 충족하지 못하면 "댓글은 최소 5단어 이상이어야 합니다"와 같은 경고가 표시되도록 했습니다.

HTML 태그가 입력되면 경고가 표시되도록 하는 코드도 추가했습니다.

그리고 댓글 콘텐츠 길이를 만족하지 않거나 태그가 입력되면 댓글 등록 버튼이 비활성화됩니다.

댓글 길이를 제한하도록 하려는 경우 자바스크립트 코드를 사용하여 사용자가 프런트엔드에서 댓글을 입력할 때 댓글 길이를 체크하여 등록이 안되도록 할 수 있습니다. 이와 함께 백엔드에서도 길이 제한을 걸면 백엔드를 통해 들어오는 무제한 길이의 댓글들을 차단할 수 있습니다.

이 블로그에 사용된 JS 코드는 다음 글에서 소개하고 있으니 참고하세요.

참고로 댓글에서 이름과 내용을 입력해야 제출 버튼이 활성화되도록 하고 싶은 경우에는 다음 글을 참고할 수 있습니다.😊

이러한 조치에도 불구하고 최근 들어 내용이 없는 빈 댓글들이 달리기 시작했습니다.

이는 눈에 보이지 않는 HTML 태그만 있는 경우일 수 있다고 하네요. 예를 들어, 아래와 같은 링크만 있고 텍스트가 없으면 댓글 길이가 5단어 이상이어도 댓글 목록에는 내용이 없는 댓글처럼 보일 수 있습니다.

<a href="..."></a>

그래서 태그를 제거하여 길이를 카운트하도록 코드를 조금 수정했습니다.

add_filter('preprocess_comment', function($comment) {
	$plain_text = trim(strip_tags($comment['comment_content']));
	$word_count = count(preg_split('/\s+/', $plain_text, -1, PREG_SPLIT_NO_EMPTY));

	if ($word_count > 250) {
		wp_die('댓글이 너무 깁니다. 댓글은 250단어까지 입력할 수 있습니다.', '댓글 길이 에러', array('back_link' => true));
	}
	if ($word_count < 5) {
		wp_die('댓글이 너무 짧습니다. 최소 5단어 이상이 되어야 합니다.', '댓글 길이 에러', array('back_link' => true));
	}

	return $comment;
}, 10);

strip_tags() 함수를 사용하면 <a> 태그 같은 것을 제거한 후 실제 텍스트만 기준으로 검사합니다.

상기 코드를 차일드 테마의 함수 파일에 추가할 수 있습니다. 실제로 상기 코드로 변경한 후에 빈 댓글이 더 이상 달리지 않네요.😄

JS 코드와 함께 위의 PHP 코드를 추가하면 이 블로그에서 댓글 길이를 기반으로 너무 짧거나 너무 긴 댓글을 필터링하는 것과 동일하게 작동하게 됩니다.

  • JS 코드: 프런트엔드에서 사용자들이 댓글을 작성할 때 길이 제한, HTML 태그 입력 제한
  • PHP 코드: 백엔드에서 제출되는 너무 짧거나 너무 긴 스팸 댓글 제한

참고

워드크래커의 아바타 이미지

워드크래커

전문 영한번역가. 워드프레스 애호가. 네이버 카페 「워프사」 운영.

댓글 남기기

댓글 남기기

카카오톡 상담 카톡 서비스 상담