블로그 자동화 중복 글 방지 방법|Google Sheets로 발행 이력 관리하기

블로그 글을 자동으로 작성하다 보면 제목만 달라진 채 비슷한 글이 또 만들어지는 일이 있습니다. 특히 여러 키워드를 한꺼번에 처리하거나 예약 발행까지 연결해 두었다면, 이미 쓴 주제인지 사람이 매번 확인하기도 어렵습니다.
블로그 자동화 중복 글 방지의 출발점은 글을 생성하기 전에 기존 발행 이력을 조회하는 것입니다. Google Sheets에 주제별 기록을 남기고, 동일한 주제가 발견되면 새 작업을 멈추도록 연결하면 관리가 훨씬 단순해집니다.
방법은 어렵지 않습니다. 발행이력 시트 하나를 기준 장부로 만들고, 작성 예정 글도 먼저 등록한 뒤, 발행 성공 여부에 따라 상태와 URL을 갱신하면 됩니다.
Google Sheets에 글의 제목과 주제 키, 발행 상태를 기록하고 새 글을 만들기 전에 같은 키가 있는지 조회하면 중복 발행 위험을 줄일 수 있습니다. 제목이 다르지만 검색 의도가 같은 글은 수식만으로 찾아내기 어려우므로 예약 글과 발행 완료 글을 함께 확인해야 합니다.
중복 글은 제목보다 '검색 의도'를 기준으로 확인하세요
예를 들어 '휴대폰 사진 용량 줄이는 방법'과 '사진 파일이 너무 클 때 압축하는 법'은 표현이 달라도 독자가 해결하려는 문제가 비슷합니다. 제목의 글자만 비교하면 이런 경우를 놓치기 쉽습니다.
따라서 제목 외에 주제 키를 하나 더 두는 것이 좋습니다. 주제 키는 같은 검색 의도를 대표하는 짧은 식별값으로, 예를 들면 phone-photo-size-reduce처럼 정할 수 있습니다. 서로 다른 제목이라도 같은 문제를 해결한다면 같은 키를 사용합니다.
반대로 비슷한 단어가 들어가더라도 독자가 궁금해하는 해결 방법이 뚜렷이 다르면 별도 글로 다룰 수 있습니다. 이 구분은 자동 수식이 아닌 편집 판단이 필요합니다.
Google Sheets 발행 이력표, 어떤 항목을 넣어야 할까요?

Google Sheets에서 새 스프레드시트를 만들고 첫 번째 시트 이름을 발행이력으로 정합니다. 1행에는 아래 항목을 순서대로 넣어 주세요. 나중에 Apps Script 예제와 연결할 때도 이 열 순서를 사용합니다.
| 열 | 항목 | 기록할 내용 |
|---|---|---|
| A | 발행일 | 실제 공개된 날짜 |
| B | 제목 | 최종 글 제목 |
| C | 주제 키 | 같은 검색 의도를 묶는 식별값 |
| D | 분류 | 생활정보·자동차·스마트폰 등 |
| E | 상태 | 작성중·예약·발행완료·확인필요 |
| F | 글 URL | 발행 확인 후 주소 입력 |
| G | 확인일 | 마지막 점검 날짜·시간 |
| H | 비고 | 수정·재시도·검토 메모 |
과거에 발행한 글도 가능한 범위에서 먼저 채워 두세요. 기존 글이 비어 있다면 자동화 시스템은 없는 기록을 중복으로 판단할 수 없습니다. 앞으로 만들 글은 발행 후가 아니라 작성 전에 '작성중' 상태로 남기는 편이 안전합니다.
COUNTIF로 같은 주제 키가 있는지 먼저 확인하기
이제 두 번째 시트를 만들고 이름을 새글로 지정합니다. A열은 후보 제목, B열은 주제 키, C열은 중복 확인 결과로 사용해 보세요.
- 발행이력 시트 C열에 과거 글의 주제 키를 채웁니다.
- 새글 시트 A2에 작성할 제목, B2에 해당 주제 키를 입력합니다.
- 새글 시트 C2에 아래 수식을 입력합니다.
=IF(B2="","",IF(COUNTIF('발행이력'!$C$2:$C,B2)>0,"중복 확인","신규 후보"))
'중복 확인'으로 표시되면 기존 글과 검색 의도가 같은지 먼저 비교하세요. '신규 후보'라도 유사한 제목이나 관련 키워드를 검색해 보는 것이 좋습니다. 이 수식은 같은 주제 키의 존재 여부를 확인할 뿐, 문장의 의미가 비슷한 글까지 자동으로 구별하지는 못합니다.
기존 기록 자체에서 중복 키를 색으로 표시하고 싶다면 발행이력 시트의 C2:C 범위를 선택한 뒤 서식 → 조건부 서식 → 맞춤 수식에서 아래 식을 사용하면 됩니다. 중복된 값이 있는 행을 시각적으로 찾는 용도입니다.
=AND($C2<>"",COUNTIF($C$2:$C,$C2)>1)
같은 키가 있다고 해서 행을 무작정 삭제하지는 마세요. 잘못 발행된 기록인지, 기존 글을 업데이트한 이력인지 먼저 확인하는 것이 좋습니다.
Apps Script로 작성 전에 중복 확인과 기록을 묶기

자동 작성 도구에 연결할 때는 '시트 확인 → 주제 선점 → 글 작성 → 실제 발행 결과 확인' 순서로 처리합니다. 시트를 확인만 하고 나중에 기록하면, 자동화가 두 번 실행될 때 두 작업이 모두 '신규'라고 판단할 수 있기 때문입니다.
Google Sheets의 확장 프로그램 → Apps Script에서 아래 함수를 작성할 수 있습니다. 이 코드는 같은 Apps Script 프로젝트가 동시에 실행되더라도 기록 확인과 새 행 추가가 겹치지 않도록 하는 간단한 주제 선점 예제입니다.
function reservePost(title, intentKey) {
const sh = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('발행이력');
if (!sh) throw new Error('발행이력 시트를 찾을 수 없습니다.');
const normalizeKey = value => String(value || '')
.normalize('NFKC').toLowerCase().replace(/\s+/g, ' ').trim();
const key = normalizeKey(intentKey);
if (!key || !String(title || '').trim()) {
throw new Error('제목과 주제 키를 입력하세요.');
}
const lock = LockService.getScriptLock();
lock.waitLock(30000);
try {
const last = sh.getLastRow();
const keys = last > 1
? sh.getRange(2, 3, last - 1, 1).getDisplayValues().flat()
: [];
if (keys.some(value => normalizeKey(value) === key)) return false;
const safeTitle = String(title).trim().replace(/^[=+@-]/, "'$&");
sh.appendRow(['', safeTitle, key, '', '작성중', '', new Date(), '']);
SpreadsheetApp.flush();
return true;
} finally {
lock.releaseLock();
}
}
자동화 흐름에서 reservePost(제목, 주제키)의 반환값이 false이면 글 생성을 중단하고, true이면 이미 '작성중'으로 등록됐으므로 이어서 글을 만듭니다. 처음 실행할 때는 Apps Script 권한 승인 과정이 필요할 수 있습니다.
이 함수 자체가 티스토리에 글을 발행하는 것은 아닙니다. 발행 API가 성공했다고 확인되면 해당 기록의 상태를 '발행완료'로 바꾸고 실제 발행일과 URL을 저장해야 합니다. 예약이 만들어진 단계라면 '예약'으로 표시하세요. 발행 요청이 실패하거나 결과가 불명확할 때는 '확인필요'로 남겨, 블로그에 글이 존재하는지 확인하기 전까지 같은 주제를 자동 재발행하지 않도록 합니다.
중복 방지 자동화에서 특히 조심할 네 가지
- 제목만 비교하지 않기: 단어가 달라도 검색 의도와 해결 방법이 같으면 중복 후보입니다.
- 예약·작성중 기록을 포함하기: '발행완료'만 조회하면 대기 중인 동일 주제가 다시 생성될 수 있습니다.
- 실패 직후 무조건 재시도하지 않기: 실제로는 발행됐지만 응답만 누락된 경우도 있으므로 URL과 관리자 글 목록을 먼저 대조합니다.
- 여러 자동화 통로를 따로 운영하지 않기: 예제의
LockService는 같은 스크립트에서 경쟁하는 실행을 조정합니다. 서로 다른 도구나 독립된 프로젝트가 발행한다면 공유된 선점 장치가 추가로 필요합니다.
무엇보다 '중복 없음'은 자동 발행 허가증이 아닙니다. 주제 키를 사람이 잘못 붙였거나 과거 발행 이력이 누락됐다면 동일한 글을 또 만들 수 있습니다. 정기적으로 실제 블로그의 글 목록과 시트 기록을 비교해 누락분을 보완하세요.
자주 묻는 질문
Q1. 발행한 글만 시트에 넣으면 안 되나요?
예약 글이나 작성 중인 글이 같은 주제로 다시 만들어질 수 있습니다. 글을 만들기 전에 기록을 선점하고 상태를 구분하는 편이 안전합니다.
Q2. COUNTIF만 있으면 비슷한 제목도 찾아주나요?
아닙니다. 정확히 같은 주제 키를 찾는 데 적합하며, 유사한 의미까지 분석하지는 않습니다. 제목 검색과 검색 의도 비교가 추가로 필요합니다.
Q3. 중복으로 표시된 주제는 다시는 작성할 수 없나요?
그렇지 않습니다. 기존 글을 업데이트할지, 독자가 해결하려는 문제가 명확히 달라 별도 글로 쓸지 검토하면 됩니다. 단순히 제목을 바꿔 재발행하는 것은 피하세요.
Q4. 발행 오류가 났을 때 기록을 삭제하고 다시 실행해도 될까요?
먼저 티스토리 관리자에서 실제 등록 여부를 확인하세요. 결과가 불분명하면 '확인필요' 상태를 유지하고 확인 후 재시도해야 중복 등록 위험을 줄일 수 있습니다.
정리: 자동화의 첫 단계는 새 글 작성이 아니라 이력 조회입니다
Google Sheets 발행 이력 관리는 별도의 거창한 시스템 없이도 시작할 수 있습니다. 먼저 제목·주제 키·상태·URL을 꾸준히 기록하고, 이후 COUNTIF와 Apps Script로 확인 과정을 연결하는 순서가 편합니다.
핵심은 같은 검색 의도의 글을 다시 만들지 않도록 작업 시작 시점에 확인하고 기록을 남기는 것입니다. 이 원칙만 지켜도 블로그 자동화를 운영하면서 주제 관리와 발행 오류 점검이 한결 쉬워집니다.
※ Google Sheets와 Apps Script의 메뉴, 기능 및 실행 조건은 변경될 수 있으므로 설정 전 공식 도움말을 확인하세요.
관련 자료
'블로그·AI 활용' 카테고리의 다른 글
| 블로그 여러 개를 하나의 Apps Script로 자동 관리할 수 있을까?|멀티블로그 자동화 방법 (0) | 2026.10.13 |
|---|---|
| ChatGPT로 블로그 글 작성부터 예약 발행까지 자동화하는 방법|전체 과정 정리 (0) | 2026.10.13 |
| Search Console 사이트맵 자동 제출하기|Google Apps Script로 매일 자동 실행하는 방법 (0) | 2026.10.13 |
| 블로그 자동화 API 비용은 얼마나 들까?|직접 운영할 때 필요한 비용 정리 (0) | 2026.10.12 |
| 구글 시트에 제목만 입력하면 블로그 글이 자동으로 올라갈까?|ChatGPT·Apps Script 자동화 방법 (0) | 2026.10.11 |
댓글