TL;DR
- Qiita/Zenn/dev.toの記事URLを入力するだけで、AI検索(ChatGPT/Perplexity等)への引用されやすさ(GEOスコア)を0-100で無料採点するツールを公開しました。
- 結論先出し、要約、FAQ、比較表など、AIが好む11項目の指標で評価し、具体的な改善点を提示します。
- アカウント登録やクレジットカードは不要。誰でもすぐに一発診断が可能です。
対象読者
- 技術記事を日常的に執筆しているエンジニア
- ChatGPTやPerplexityなどのAI検索エンジンからの流入(引用)を増やしたい方
- SEOだけでなく、これからの時代のコンテンツ最適化(GEO)に興味がある方
動作環境
- 利用環境: モダンブラウザ(PC / スマートフォン対応)
- 対象URL: Qiita, Zenn, dev.to の公開記事URL
なぜ作ったか(開発の背景)
近年、技術的な課題を解決する際、従来の検索エンジン(Google等)だけでなく、ChatGPTやPerplexityといったAI検索を利用するエンジニアが増加しています。これに伴い、技術発信の「成果」は「検索上位を取ること」から「AIの回答に引用されること」へシフトしつつあります。
しかし、自分の書いた記事がどれだけAIに引用されやすい構造になっているかは、普段の執筆活動では全く見えません。まずはこの「引用されやすさ」を定量的に測れるようにしたいと考えました。
現在、私は「Polypost」という技術記事の執筆・配信支援サービスをひとりで開発しています。その中で実装した採点ロジックを、誰でも手軽に試せる無料の入口として切り出し、今回のツールとして公開するに至りました。
GEO(Generative Engine Optimization)とは
GEO(Generative Engine Optimization)は、AIの回答に自らのコンテンツが引用されるための最適化手法です。AEO(Answer Engine Optimization)やLLMO(Large Language Model Optimization)と呼ばれることもあります。
SEOとGEOの違いを以下の比較表にまとめました。
| 項目 | SEO (Search Engine Optimization) | GEO (Generative Engine Optimization) |
|---|---|---|
| 主なターゲット | Google, Bingなどの検索エンジン | ChatGPT, PerplexityなどのAI検索/LLM |
| 目的 | 検索結果の順位向上、クリック率の増加 | AIの生成する回答への「出典(Source)」としての引用 |
| 重要な要素 | キーワード網羅性、被リンク、ドメインパワー | 結論の先出し、事実に基づく具体数値・統計、明確な構造化 |
| 有効なフォーマット | 長文網羅型、Hタグの適切な階層 | TL;DR(要約)、FAQ、比較表、再現可能なコードブロック |
AIは情報を抽出・合成して回答を生成するため、人間にとって読みやすいだけでなく、機械(LLM)にとっても「情報の抽出が容易な構造」であることが求められます。
ツールの使い方と採点ロジック
使い方は非常にシンプルです。
- 診断サイトにアクセスし、記事のURLを貼り付ける
- 数秒待つと、0-100の「GEOスコア」と11項目の内訳が表示される
- 「結論が先出しされているか」「比較表があるか」など、どこを直せばスコアが上がるかが分かる
採点には、記事のHTML構造やMarkdownの要素を解析し、GEOに有効とされる11の指標に基づいて評価する独自のヒューリスティックエンジンを用いています。
実装の裏側:記事本文の抽出ロジック
本ツールでは、入力されたURLから記事の構造を正確に抽出する必要があります。参考として、Node.js環境でQiitaの記事URLからタイトルと本文を抽出する最小限の完全なサンプルコードを記載します。
// 動作環境: Node.js v18以上
// 必要なパッケージ: npm install cheerio
import * as cheerio from 'cheerio';
/**
* Qiitaの記事URLからタイトルと本文を抽出する関数
* @param {string} url - Qiitaの記事URL
*/
async function extractQiitaArticle(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTPエラー: ${response.status}`);
}
const html = await response.text();
const $ = cheerio.load(html);
// タイトルの取得
const title = $('title').text().replace(' - Qiita', '');
// 本文の取得(Qiitaの本文コンテナのIDを指定)
const articleBody = $('#personal-public-article-body');
// 不要な要素(スクリプトなど)を除去
articleBody.find('script, style').remove();
const contentText = articleBody.text().trim();
console.log("=== 抽出結果 ===");
console.log(`タイトル: ${title}`);
console.log(`文字数: ${contentText.length}文字`);
console.log(`本文プレビュー: ${contentText.substring(0, 150)}...`);
return {
title,
contentLength: contentText.length,
content: contentText
};
} catch (error) {
console.error("抽出に失敗しました:", error.message);
}
}
// 動作確認用の実行例
// 実行方法: node extract.mjs
extractQiitaArticle('https://qiita.com/Qiita/items/c686397e4a0f4f11683d');
実際のツールでは、抽出したテキストやHTMLタグ(<table>や<code>など)の出現頻度、配置箇所(冒頭に要約があるか等)を解析し、スコアリングを行っています。
正直なところと今後の課題
公開したばかりのツールであり、実績はこれから積み上げていく段階です。スコア算出は自作のヒューリスティックなルールベースに依存しているため、万能ではありません。
「この構成なのにスコアが低い」「この項目はもっと評価されるべき」といった辛口のフィードバックも歓迎します。実際のAIの引用傾向を分析しながら、継続的にロジックをアップデートしていく予定です。
有料版との線引きについて
今回公開した無料診断ツールは、あくまでURLからの「一発チェック」機能です。
本人の文体を保ったままのAIリライト機能、過去の全記事の一括スキャン、複数媒体(Qiita/Zenn等)への最適化生成および投稿機能については、現在開発中の「Polypost」の有料機能(無料トライアルあり)として提供予定です。まずは無料の診断ツールで、ご自身の記事の現状を把握してみてください。
よくある質問
Q. スコアが100点なら確実にAIに引用されますか?
A. 確実な引用を保証するものではありません。しかし、結論の先出しや明確な構造化が行われている記事は、LLMが文脈を理解しやすく、事実抽出の精度が上がるため、結果として引用される確率(GEOの成功率)は高まると推測されます。
Q. 採点結果や入力したURLは保存されますか?
A. 無料診断ツールで入力されたURLや採点結果は、サービス改善のための統計データとして匿名で利用させていただく場合がありますが、ユーザー個人を特定する形での保存や公開は行いません。
おわりに
記事のGEOスコアは、診断結果のOGカード画像とともにX(旧Twitter)などでシェアできるようになっています。
「あなたの記事は何点?」ぜひ一度測って、結果を教えてください。
無料でGEOスコアを測る → https://polypost.dev/geo-score