![티스토리 구글 서치 콘솔 미생성 색인 요청 자동화하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzcB4H%2FbtsL1B1AVbF%2FdFGqfej4NYcpUGFVXxrC00%2Fimg.png)
티스토리 구글 서치 콘솔 미생성 색인 요청 자동화하기잡2025. 1. 30. 15:55
Table of Contents
728x90
728x90
2년 넘게 기술 블로그를 운영해오면서 블로그 세팅할 때 처음으로 들어가보고, 2년만에 구글 서치 콘솔에 들어가봤다.
![](https://blog.kakaocdn.net/dn/bzcB4H/btsL1B1AVbF/dFGqfej4NYcpUGFVXxrC00/img.png)
![](https://blog.kakaocdn.net/dn/bxzCtT/btsL2kSNjYC/6x3XSrTkOpYgykLGbiKRH1/img.png)
어마어마하게 색인이 생성되지 않았는데, 아마 블로그를 운영하면서 불필요한 카테고리를 삭제하거나, 이동시킨 이유들 때문인 것 같다. 4040, 4043, 차단등의 문제는 제외하더라도, 적절한 표준 태그가 포함된 대체 페이지, 색인이 생성되지 않음 의 사유에 해당하는 페이지들은 색인 생성을 한 번쯤은 신청할 필요가 있어 보인다.
![](https://blog.kakaocdn.net/dn/SM7se/btsL3ofLc7k/qmv86U8KDnHJjLT3yHJloK/img.png)
기술 블로그만해도 1500페이지 가량 되는 것 같은데, 이 수많은 페이지들을 일일이 색인 생성 요청을 보낼 수 없는 노릇이다. 그래서 GCP의 Web Search Index API를 이용해 자동으로 요청을 보내어 처리하였다.
![](https://blog.kakaocdn.net/dn/c3TroS/btsL2RWI6lk/VQvJMINXWLbmj5UC4pkhx1/img.png)
페이지 색인 생성이 필요한 페이지 URL은 어느정도 수작업이 필요했는데, 페이지 색인 생성 페이지에서 세부 정보 보기를 클릭하여 내보내기 버튼을 통해 엑셀 파일로 내보낼 수 있었다. 내보내기를 통해 엑셀파일을 읽어 API를 통해 색인 업데이트 요청을 보내기만 하면 되는 간단한 자동 색인 생성 요청 코드를 만들어보았다.
const xlsx = require("xlsx");
const request = require("request");
const { google } = require("googleapis");
const key = require("./service_account.json");
// ✅ 1. 엑셀 파일 로드 & URL 리스트 추출
function getUrlListFromExcel(filePath) {
const workbook = xlsx.readFile(filePath); // 엑셀 파일 읽기
const sheetName = workbook.SheetNames[0]; // 첫 번째 시트 사용
const sheet = workbook.Sheets[sheetName];
// A열에서 URL 리스트 추출 (A2부터 끝까지)
const urlList = [];
const range = xlsx.utils.decode_range(sheet["!ref"]);
for (let row = 1; row <= range.e.r; row++) {
// 1부터 시작 (A2부터)
const cellAddress = xlsx.utils.encode_cell({ c: 0, r: row }); // A열(row)
const cell = sheet[cellAddress];
if (cell && cell.v) {
urlList.push(cell.v); // URL 추가
}
}
return urlList;
}
// ✅ 2. Google Indexing API 인증 및 요청 실행
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); // 대기 함수 추가
async function requestIndexingWithDelay(urlList) {
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
["https://www.googleapis.com/auth/indexing"],
null
);
const tokens = await new Promise((resolve, reject) => {
jwtClient.authorize((err, tokens) => {
if (err) reject(err);
else resolve(tokens);
});
});
let failedUrls = [];
for (let i = 0; i < urlList.length; i++) {
const url = urlList[i];
let options = {
url: "https://indexing.googleapis.com/v3/urlNotifications:publish",
method: "POST",
headers: {
"Content-Type": "application/json",
},
auth: { bearer: tokens.access_token },
json: {
url: url,
type: "URL_UPDATED",
},
};
try {
const response = await request(options);
console.log(`✅ 성공 (${i + 1}/${urlList.length}): ${url}`);
} catch (error) {
console.log(`❌ 실패 (${i + 1}/${urlList.length}): ${url}`);
failedUrls.push(url);
}
await delay(100); // 대기 후 다음 요청 실행 (Rate Limit 방지)
}
console.log("\n🎯 [실패한 URL 목록]");
if (failedUrls.length > 0) {
failedUrls.forEach((failedUrl) => console.log(failedUrl));
} else {
console.log("✅ 모든 요청이 성공적으로 처리되었습니다!");
}
}
// ✅ 3. 실행 (엑셀 파일에서 URL 가져와서 요청)
const filePath = "./urls.xlsx"; // ✅ 엑셀 파일 경로 (현재 폴더에 위치)
const urlList = getUrlListFromExcel(filePath);
console.log(`📢 총 ${urlList.length}개의 URL을 색인 요청합니다.`);
requestIndexingWithDelay(urlList);
혹여 코드를 사용해보려하는 사람들을 위한 세팅법을 간략하게 남기며 포스팅을 정리한다.
- JavaScript 코드를 실행해야하므로 nodejs를 필요로한다. nodejs를 설치하고 실행할 수 있는 환경을 구성해야한다.
- 색인 등록에 필요한 GCP부터 GCP IAM, API 세팅까지 끝마치고 GCP IAM의 JSON파일을 필요로한다. 세팅 방법은 링크에서 확인하자. 정말 자세하게 공유되어있다.
- IAM의 JSON파일과, 색인 URL 경로가 들어있는 xlsx파일은 위 코드와 같은 depth 경로에 있어야한다.
![](https://blog.kakaocdn.net/dn/c2gOQz/btsL39WJe0j/CZVkSUEb3kYBEV2CEZYzwk/img.png)
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!