ChatGPT APIでSEO業務の効率改善。人力では困難な膨大な作業をAIで自動化

OpenAI Playground
「週末なにする?そんな時は、アソビュー!」でおなじみの遊び予約サイト「アソビュー!」のSEOを担当している西本です。

今年2月に受診した健康診断の結果に危機感を覚え、ダイエットを始めました。毎月1.5kgずつ体重が落ちており、今の所順調です。目指せ、健康体。

今回はChatGPTのSEO活用についてです。

ChatGPTを始めとした生成系AIのSEO活用については記事制作の文脈で語られることが多いと思いますが、僕はオウンドメディアの担当ではなく記事も書かないためそこには触れません。ページ数の多い大規模サイトのテクニカルSEOの業務の中で活用出来ないか、試行錯誤した結果をお伝え出来ればと思います。

ChatGPT APIを使用しているのですが、以下の条件を満たす業務の効率化に使えるのでは、と考えています。

  • 1回の作業自体は簡単で誰にでも出来る
  • 機械的に一括で処理するのが難しい
  • 対応が必要な件数が膨大に存在し人力での対応が難しい

ChatGPT API

はじめに前提としてChatGPT APIについて簡単に説明します。

詳細な解説は他の記事や公式のリファレンスを参照頂ければと思いますが、Web版とは異なり system,user,assistant の3つが指定出来ます。

  • system:設定や制約
  • user:指示や質問
  • assistant:文脈理解のためにこれまでのやり取りを記載

後述する事例で実際に使用しているpromptも記載します。今回の事例ではassistantは不要なため、systemとuserを記載しています。
(※2023/6/22追記 assistantの説明が誤っていたため訂正しました。)

使用しているモデルはGPT-4です。

尚、GPT-4のAPIは記事執筆時点では一部のユーザに限定的に公開されており、使用するためにはwaitlistに登録し、使用開始を待つ必要があります。※最近のアップデートによりこれからwaitlistの招待増えそうですが。
誰でも使えるGPT-3.5-turboでも試していましたが、アウトプットを比較するとGPT-4の方がずっと精度が高かったため、GPT-4のみ使用しています。あと、GPT-3.5-turboだと扱える最大token数が4096ですが、GPT-4だと倍の8192まで使えるため、その点もメリットです。
GPT-4のデメリットは、GPT-3.5-turboよりもAPIの使用料が高いぐらいでしょうか。

以下、ChatGPTの活用事例を記載していきますが、前提(現状の問題)、解決方法、アウトプット例の3点で記載していきます。

(事例1)最適な検索回数の特定

▼前提(現状の問題)

  • asoviewで対策するキーワードのうち、検索回数が多いのはレジャー施設の施設名称
  • SEOで対策を実施するキーワードの優先順の判断に施設名称の検索回数を利用している
  • データとして保持している施設名称は正式名称で、検索する際に使用される通称とは異なる
  • 正式名称と通称だと検索回数に乖離があるため、優先順の判断を誤るケースがある
    (例)正式名称:恩賜上野動物園(検索回数 1,000)、通称:上野動物園(検索回数 450,000)
  • 修正内容のパターン化が出来ず、対象のキーワード数も10万件以上あり、人力で正規化するのが難しい

▼解決方法

ChatGPT APIで通称を取得する。取得対象の施設の正式名称に対して、以下のpromptでChatGPT APIにリクエストを送る。

system:
#制約条件
・通称のみを出力すること
・表記揺れを考慮すること
・記号を含めないこと
user:
{正式名称} の一般的によく使われる通称を教えてください。

▼アウトプット例

恩賜上野動物園 → 上野動物園
井の頭恩賜公園 → 井の頭公園
福井県立恐竜博物館 → 福井恐竜博物館
国営昭和記念公園 → 昭和記念公園
三鷹の森ジブリ美術館 → ジブリ美術館

(事例2)設定ジャンルの見直し

▼前提(現状の問題)

  • asoview内に掲載される施設情報は基本的には契約頂いた施設のものだが、一部契約していない施設の情報も掲載している(以下、非契約施設と記述)
  • 非契約施設の掲載情報は他社から提供されたデータを使用している
  • 非契約施設で設定されているジャンルは、他社から提供されたデータを元にしているため、元の設定が間違えていたらジャンルの設定も間違う
  • 他社で設定されているジャンルからasoviewのジャンルに付け替えを行っているため、一部本来とは異なるジャンルが設定されているケースがある
  • 非契約施設のページ数が10万件以上あるため、人力でジャンルを見直すのが難しい

▼解決方法

ChatGPT APIで適切なジャンルに見直しをする。見直し対象の非契約施設に対して、以下のpromptでChatGPT APIにリクエストを送る。

system:
#制約条件
・ジャンルのみを出力すること
user:
{施設名称} に最適なジャンルを以下から選んでください。
※asoviewで使用している全てのカテゴリ名称(220件)を羅列

▼アウトプット例

・いしかりパークゴルフ場(※現状はアスレチック)
→ ゴルフ
・奥中山高原遊具ひろば(※現状はアスレチック)
→ アスレチック
・燕市交通公園(※現状はアスレチック)
→ 公園

(事例3)重複ページの特定

▼前提(現状の問題)

  • 契約施設と非契約施設をそれぞれ別でページを作っているが、両者間で重複するケースが散見される
  • 定期的に契約施設と非契約施設での重複を確認し、重複している非契約施設は削除している
  • 施設名称と住所を使って名寄せしているが、表記揺れが多く特定するのが難しい
    (例1)施設名称が異なるケース
    アソビュー株式会社,〒141-0032 東京都品川区大崎1-11-2
    「アソビュー」,〒141-0032 東京都品川区大崎1-11-2
    (例2)住所が異なるケース
    アソビュー株式会社,〒141-0032 東京都品川区大崎1-11-2
    アソビュー株式会社,〒141-0032 東京都品川区大崎1-11-2 ゲートシティ大崎イーストタワー8F

▼解決方法

ChatGPT APIで重複を判定する。確認対象の契約施設に対して、以下の流れで重複有無の確認を行う。 ※Google検索の箇所はSerpApiを使用

(1)重複確認対象の施設名称で以下Google検索を実施
site:https://www.asoview.com/ {施設名称}
(2)検索結果に表示されたページの中で、施設ページの場合は施設名称と住所をスクレイピングで取得
(3)確認対象の施設に対して以下promptでChatGPT APIにリクエスト実施
system:
#入力情報
施設名称,住所
#制約条件
表記揺れを考慮すること
user:
以下2つの情報は同じ施設のことですか?「はい」か「いいえ」で回答し、理由も教えてください。
{施設名称},{住所} ※確認対象施設
{施設名称},{住所} ※検索結果から取得した施設

▼アウトプット例

(例1)施設名称が異なるケース ※具体名は省略
→ はい、同じ施設のことです。表記揺れを考慮しましたが、施設名称「xxxxx」と住所「〒xxx-xxxx xxxxx」が一致しているため、同じ施設です。
(例2)住所が異なるケース ※具体名は省略
→ はい、同じ施設のことだと思われます。住所が同じで、施設名称も「xxxxx」と表記しています。また、xxxxxという情報も付与されているので、同じ施設であると判断できます。

さいごに

上記いずれの事例も100%想定通りの結果が返ってくるわけではないのでまだ見直しの余地があるかもしれませんが、概ね想定通りの結果が返ってきているため満足です。まだまだ活用出来るケースは多くあると思うので、引き続きChatGPT APIを活用した改善は続けていきたいと思います。今回紹介した事例、及び他の活用方法について僕とお話しして頂ける心優しい方がいれば、こちらまでご連絡ください。

おまけ

アソビューにはAIラボというAI活用の専門組織もあり、全社的にAI活用を推進しています。また、AI活用の予算も潤沢に確保しており、アソビューに入ればChatGPTを使ってあんな事やこんな事まで色々出来てしまいます。そんなアソビューでAIを活用したプロダクト開発にチャレンジしてみませんか?

www.asoview.com