본문 바로가기

Search Console 사이트맵 자동 제출하기|Google Apps Script로 매일 자동 실행하는 방법

BinniH2 2026. 10. 13.
반응형

책상 위 노트북에 사이트맵과 자동 실행을 상징하는 그림이 표시된 모습

 

Search Console에 사이트맵을 등록해 놓고도 새 글을 올릴 때마다 다시 제출해야 하는지 궁금할 때가 있습니다. 블로그 여러 개를 관리한다면 반복 작업을 자동화하고 싶은 마음도 생기지요.

Google Apps Script와 Search Console API를 연결하면 사이트맵 주소를 하루 한 번 자동으로 제출할 수 있습니다. 다만 티스토리의 기존 사이트맵이 정상 등록되어 있다면 매일 재제출이 필수는 아닙니다. 자동화 기능이 필요한 상황인지 먼저 살펴보는 편이 좋습니다.

핵심 요약

Search Console 사이트맵 자동 제출은 Apps Script에서 제출 API를 호출하고 일일 시간 트리거를 등록하면 설정할 수 있습니다. 사이트맵을 매일 다시 제출해도 색인 속도나 검색 노출이 보장되는 것은 아니므로 기존 등록 상태와 오류부터 확인하세요.

Search Console 사이트맵 자동 제출, 시작 전에 확인할 것

사이트맵은 Google이 웹사이트의 공개 페이지 주소를 파악할 수 있도록 알려주는 파일입니다. 티스토리는 기본적으로 /sitemap.xml 주소에서 사이트맵을 제공하고, 서치콘솔 플러그인을 통해 자동 제출 기능도 안내하고 있습니다.

따라서 이미 티스토리 플러그인으로 등록했거나 Search Console의 사이트맵 상태가 정상이라면, 별도 Apps Script를 만들지 않아도 됩니다. 이번 방법은 제출 작업을 직접 제어하거나 여러 사이트에 대한 운영 절차를 정리하고 싶은 분에게 적합합니다.

블로그 페이지 구조에서 사이트맵 파일로 연결되는 과정을 보여주는 도식

준비할 항목 세 가지

  • Search Console 등록 속성: 사이트 소유권을 확인한 Google 계정이 필요합니다.
  • 실제로 열리는 사이트맵 주소: 예를 들어 https://example.tistory.com/sitemap.xml입니다.
  • Google Apps Script: Apps Script에서 새 프로젝트를 만듭니다.

가장 중요한 것은 속성 URL과 사이트맵 URL이 서로 다른 값이라는 점입니다. URL 접두어 속성은 보통 https://example.tistory.com/처럼 마지막 슬래시까지 포함하고, 도메인 속성이라면 sc-domain:example.com 형태를 사용합니다. Search Console에서 실제로 등록한 속성과 정확히 일치시켜 주세요.

Apps Script 코드로 사이트맵 제출 API 연결하기

Apps Script에서 새 프로젝트를 만든 뒤 Code.gs에 다음 코드를 넣습니다. 코드는 Search Console API에 요청을 보내고, 응답 코드가 성공 범위에 있지 않으면 오류를 기록하도록 구성했습니다.

코드 편집을 상징하는 추상적인 색상 줄과 설정 영역이 보이는 노트북 그림

const PROPERTY_URL = 'https://example.tistory.com/';
const SITEMAP_URL = 'https://example.tistory.com/sitemap.xml';

function submitSitemap() {
  const apiUrl = 'https://www.googleapis.com/webmasters/v3/sites/'
    + encodeURIComponent(PROPERTY_URL)
    + '/sitemaps/' + encodeURIComponent(SITEMAP_URL);

  const response = UrlFetchApp.fetch(apiUrl, {
    method: 'put',
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    },
    muteHttpExceptions: true
  });

  const status = response.getResponseCode();
  Logger.log('HTTP ' + status + ' / ' + response.getContentText());
  if (status < 200 || status >= 300) {
    throw new Error('사이트맵 제출 실패: HTTP ' + status
      + ' / ' + response.getContentText());
  }
}

function installDailyTrigger() {
  ScriptApp.getProjectTriggers()
    .filter(t => t.getHandlerFunction() === 'submitSitemap')
    .forEach(t => ScriptApp.deleteTrigger(t));

  ScriptApp.newTrigger('submitSitemap')
    .timeBased()
    .atHour(9)
    .everyDays(1)
    .inTimezone('Asia/Seoul')
    .create();
}

코드 맨 위의 PROPERTY_URL은 Search Console에 등록된 속성으로, SITEMAP_URL은 실제 사이트맵 전체 주소로 바꿉니다. 예제 주소를 그대로 두면 본인 사이트에 제출되지 않습니다.

이때 API 요청은 PUT 방식입니다. POST로 바꾸거나 sitemap.xml 파일명만 전달하면 올바르게 작동하지 않을 수 있습니다. 요청 주소에 포함되는 두 URL은 encodeURIComponent()로 각각 인코딩합니다.

앱 권한 범위를 지정하는 방법

편집기 왼쪽의 프로젝트 설정에서 ‘편집기에 'appsscript.json' 매니페스트 파일 표시’ 옵션을 켠 다음 파일을 엽니다. 기존 설정이 있다면 다른 항목을 지우지 말고 oauthScopes를 포함하도록 조정합니다. 새 프로젝트에서는 다음 구조를 참고할 수 있습니다.

{
  "timeZone": "Asia/Seoul",
  "oauthScopes": [
    "https://www.googleapis.com/auth/webmasters",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/script.scriptapp"
  ]
}

각각 Search Console 수정 권한, 외부 URL 호출 권한, 트리거 관리 권한입니다. webmasters.readonly는 읽기 전용이라 사이트맵 제출에 사용할 수 없습니다. 권한을 요청받을 때는 Google 계정과 내용을 확인한 뒤 승인하세요.

매일 자동으로 실행할 시간 기반 트리거 설정하기

먼저 함수 목록에서 submitSitemap을 선택해 한 번 수동으로 실행합니다. 처음 실행하면 권한 승인 절차가 나타날 수 있습니다. 승인 후 실행 기록에서 HTTP 응답을 확인하세요.

수동 실행이 정상이라면 함수 목록에서 installDailyTrigger를 선택해 한 번 실행합니다. 그러면 submitSitemap을 한국 시간 기준 매일 오전 9시대에 실행하도록 예약합니다. 같은 프로젝트의 같은 함수에 설치된 기존 트리거를 지우고 새로 만들어 중복 실행을 줄이는 방식입니다.

달력에서 시계를 거쳐 완료 확인 표시로 이어지는 자동화 흐름 그림

 

Apps Script의 시간 기반 트리거는 정확히 오전 9시 정각에 실행된다는 뜻이 아닙니다. Google 공식 문서에 따르면 설정한 시간대 안에서 실제 실행 시각이 조정될 수 있습니다. 다른 시간을 원한다면 코드의 atHour(9) 숫자를 바꾸면 됩니다.

정상 제출 여부는 이렇게 확인하세요

  1. Apps Script의 실행 메뉴에서 오류 없이 끝났는지 확인합니다.
  2. 로그에 HTTP 성공 코드가 기록됐는지 확인합니다. 성공 응답 본문은 비어 있을 수 있습니다.
  3. Google Search Console의 대상 속성에서 사이트맵 보고서를 열어 제출 기록과 처리 상태를 살펴봅니다.

API 요청 성공은 제출 요청을 접수했다는 뜻이지 사이트맵의 모든 URL이 색인되었다는 뜻은 아닙니다. Search Console의 사이트맵 처리 상태나 개별 페이지 색인은 별도로 확인해야 합니다.

권한 오류와 제출 실패가 날 때 확인할 부분

401 오류가 나면 현재 Google 계정의 인증 상태와 권한을 확인합니다. 403 오류는 속성 접근 권한이나 API 사용 설정 문제일 수 있으니, 해당 계정의 Search Console 권한 및 연결된 Google Cloud 프로젝트에서 Search Console API 사용 가능 여부를 살펴보세요.

404 오류가 표시된다면 속성 주소나 사이트맵 전체 URL을 잘못 입력했는지 먼저 비교하는 편이 좋습니다. 특히 URL 접두어 속성의 https://, 마지막 /, 맞춤 도메인 사용 여부를 확인하세요. 자동 제출 전에 브라우저에서 사이트맵 주소가 실제로 열리는지도 점검해야 합니다.

트리거가 여러 개 있으면 동일한 함수가 반복 실행될 수 있으니 트리거 목록도 확인합니다. 스크립트의 OAuth 토큰을 로그에 출력하거나 다른 사람과 공유하지 않는 것도 중요합니다.

자주 묻는 질문

Q1. 새 글을 발행할 때마다 사이트맵을 다시 제출해야 하나요?

보통은 필요하지 않습니다. 티스토리 사이트맵이 계속 업데이트되고 Google이 접근할 수 있다면 기존 제출 상태를 우선 확인하세요.

Q2. 매일 자동 제출하면 새 글이 당일 구글에 노출되나요?

보장되지 않습니다. 사이트맵은 URL 발견을 돕는 신호이며 실제 크롤링, 색인 생성과 검색 노출은 별도의 과정입니다.

Q3. 도메인 속성도 같은 코드로 제출할 수 있나요?

가능합니다. 다만 PROPERTY_URL을 실제 Search Console 속성 값인 sc-domain:example.com 형태로 입력해야 합니다.

Q4. 자동 제출을 중단하려면 어떻게 하나요?

Apps Script의 트리거에서 submitSitemap에 연결된 시간 기반 트리거를 삭제하면 됩니다. 코드만 삭제하고 트리거를 남겨두지 않도록 확인하세요.

정리: 자동화보다 먼저 살펴볼 것은 사이트맵 상태입니다

Search Console 사이트맵 자동 제출은 기술적으로 구현할 수 있으며, 권한 설정과 실행 테스트를 마친 다음 트리거를 연결하면 됩니다. 하지만 한 번 정상 등록한 사이트맵을 매일 반복 제출하는 것이 검색 성과를 높인다는 근거는 없습니다. 관리 작업을 줄이는 목적이라면 필요한 경우에만 활용하시고, 평소에는 사이트맵 읽기 오류와 페이지 색인 현황을 꾸준히 확인하는 것이 더 실용적입니다.

※ Google 서비스의 메뉴와 API 권한·동작 방식은 변경될 수 있으므로 실제 설정 전 공식 개발자 문서를 확인하세요.

관련 자료

반응형

댓글