PromleeBlog
sitemapaboutMe

posting thumbnail
Google Indexing API 사용 방법
Complete Guide to Using Google Indexing API

📅

🚀

들어가기 전에🔗

웹사이트의 새로운 페이지나 변경된 내용을 Google에 빠르게 알리고 싶다면
Google Indexing API
를 활용해야 합니다다. 이 API를 사용하면 Google에 직접적으로 페이지의 추가, 수정 또는 삭제를 알릴 수 있어 검색 결과에 신속하게 반영될 수 있습니다. 이번 글에서는 Google Indexing API를 어떻게 설정하고 사용하는지 차근차근 알아보겠습니다.

🚀

Google Indexing API란?🔗

Google Indexing API는 웹사이트 소유자가 특정 페이지의 추가, 수정 또는 삭제를 Google에 직접 알릴 수 있는 도구입니다. 특히,
채용 정보
라이브 스트리밍 이벤트
와 같이
수명이 짧은 콘텐츠
에 유용합니다. 예를 들어, 새로운 채용 공고를 게시했을 때 이 API를 사용하면 Google이 해당 페이지를 빠르게 크롤링하여 검색 결과에 반영할 수 있습니다. (developers.google.com)

🚀

Indexing API의 주요 기능🔗

Indexing API를 통해 다음과 같은 작업을 수행할 수 있습니다

🚀

Indexing API 사용을 위한 준비 사항🔗

각 단계에 대한 자세한 내용은 Indexing API 사용을 위한 기본 요건을 참고하세요. (developers.google.com)
API를 사용하기 전에 다음과 같은 단계별 준비가 필요합니다

1. Google API 콘솔에서 프로젝트 생성🔗

  1. Google API 콘솔에 접속합니다
  2. 새 프로젝트를 생성하고 이름을 지정합니다
  3. 'API 및 서비스' 메뉴에서 'Indexing API'를 검색하여 활성화합니다
image

2. 서비스 계정 생성🔗

  1. 서비스 계정 페이지로 이동합니다
  2. "서비스 계정 만들기" 클릭
  3. 서비스 계정의 이름과 설명을 입력합니다
  4. "만들기" 클릭
  5. "키 만들기" 섹션에서 JSON 형식의 키 파일을 생성하고 다운로드합니다
    • 이 키 파일은 유일한 사본이므로 안전하게 보관해야 합니다
    • 키 파일에는 client_email 필드가 포함되어 있으며, 이는 다음 단계에서 필요합니다

3. Search Console에 서비스 계정 등록🔗

  1. Search Console에서 사이트 소유권을 먼저 인증합니다
    • 도메인 속성(example.com) 또는
    • URL 접두어 속성(https://example.com) 중 선택
  2. 인증된 속성에서 "설정" > "사용자 및 권한" 메뉴로 이동
  3. "사용자 추가" 클릭
  4. 서비스 계정 이메일 주소 입력
    • 형식: my-service-account@project-name.google.com.iam.gserviceaccount.com
  5. 소유자 권한으로 추가

4. OAuth 액세스 토큰 설정🔗

모든 API 요청에는 OAuth 토큰이 필요합니다. 토큰 발급 시 다음 사항을 준수해야 합니다:
  1. 스코프는 반드시 https://www.googleapis.com/auth/indexing을 사용
  2. 서비스 계정의 액세스 토큰 포함
  3. 요청 본문은 API 문서에 명시된 형식을 따라야 함
이 코드는 Node.js 코드로, 필자는 Next.js route에서 작성한 코드입니다. 위의 Google JSON 키는 .env 파일에 한줄로 저장해서 사용합니다.
NEXT_PUBLIC_GOOGLE_API_CREDENTIALS={"type": "service_account","project_id": "apipromlee","private_key_id": ...
googleapis 라이브러리를 설치해야 합니다.
npm install googleapis
예시 코드 (Next.js):
src/app/api/google-indexing/route.ts
export const dynamic = "force-dynamic";
import { createResponse } from "@/config/apiResponse";
import { NextRequest, NextResponse } from "next/server";
import { google } from "googleapis"; 
 
export async function POST(req: NextRequest) {
  const url = req.nextUrl.searchParams.get("url");
 
  const key = JSON.parse(process.env.NEXT_PUBLIC_GOOGLE_API_CREDENTIALS!);
  console.log(key.private_key, key.client_email);
  const jwtClient = new google.auth.JWT(
    key.client_email,
    undefined,
    key.private_key,
    ["https://www.googleapis.com/auth/indexing"],
    undefined,
  );
 
  jwtClient.authorize((err, tokens) => {
    if (err) {
      console.error(err);
      return;
    }
    if (tokens) {
			console.log(tokens.access_token);
    }
  });
  return NextResponse.json(createResponse("get token complete"));
}

주의사항🔗


🚀

Indexing API 사용 방법🔗

이제 준비가 완료되었으니, 실제로 API를 사용하는 방법을 알아보겠습니다.

1. URL 업데이트하기🔗

새로운 페이지를 추가하거나 기존 페이지를 수정한 경우, 다음과 같이 Google에 알릴 수 있습니다
{
  "url": "https://www.promlee.com/new-page",
  "type": "URL_UPDATED"
}
위의 JSON 데이터를 https://indexing.googleapis.com/v3/urlNotifications:publish 엔드포인트로 HTTP POST 요청을 보내면 됩니다. (developers.google.com)
이 코드는 Next.js route에서 이어서 작성한 코드입니다. 위의 코드에서 토큰을 발급받은 후, 다음과 같이 사용합니다.
src/app/api/google-indexing/route.ts
export const dynamic = "force-dynamic";
import { createResponse } from "@/config/apiResponse";
import { NextRequest, NextResponse } from "next/server";
import { google } from "googleapis";
 
export async function POST(req: NextRequest) {
  const url = req.nextUrl.searchParams.get("url");
 
  const key = JSON.parse(process.env.NEXT_PUBLIC_GOOGLE_API_CREDENTIALS!);
  const jwtClient = new google.auth.JWT(
    key.client_email,
    undefined,
    key.private_key,
    ["https://www.googleapis.com/auth/indexing"],
    undefined,
  );
 
  jwtClient.authorize((err, tokens) => {
    if (err) {
      console.error(err);
      return;
    }
    if (tokens) {
      fetch("https://indexing.googleapis.com/v3/urlNotifications:publish", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${tokens.access_token}`,
        },
        body: JSON.stringify({
          url: url,
          type: "URL_UPDATED",
        }),
      })
        .then((res) => {
          console.log("googleIndexing" + res.status);
        })
        .catch((err) => {
          console.log(err.message);
        });
    }
  });
 
  return NextResponse.json(createResponse("url send complete"));
}

2. URL 삭제하기🔗

페이지를 삭제했거나 더 이상 노출하고 싶지 않은 경우, 다음과 같이 요청합니다:
{
  "url": "https://www.promlee.com/old-page",
  "type": "URL_DELETED"
}
이렇게 하면 해당 페이지가 Google 색인에서 제거되도록 요청할 수 있습니다. (developers.google.com)

3. 알림 상태 확인하기🔗

제출한 알림의 상태를 확인하려면 다음과 같이 GET 요청을 보냅니다:
GET https://indexing.googleapis.com/v3/urlNotifications/metadata?url=https%3A%2F%2Fwww.promlee.com%2Fpage
이렇게 하면 해당 URL에 대한 최신 알림 정보를 확인할 수 있습니다. (developers.google.com)

4. 일괄 요청 보내기🔗

여러 개의 요청을 한 번에 보내고 싶다면, 최대 100개의 요청을 일괄 처리할 수 있습니다. 이를 통해 HTTP 연결 수를 줄이고 효율성을 높일 수 있습니다. 자세한 내용은 일괄 색인 생성 요청 보내기 섹션을 참고하세요. (developers.google.com)

🚀

결론🔗

Google Indexing API를 활용하면 웹사이트의 중요한 변경 사항을 Google에 신속하게 알릴 수 있어 검색 결과에 빠르게 반영될 수 있습니다. 특히, 자주 변경되는 콘텐츠나 수명이 짧은 페이지에 매우 유용합니다. 위에서 소개한 절차를 따라 API를 설정하고 활용해 보세요.

참고🔗