000%

更新

NOTES · SEO / GEO / AEO13 · 2026.10

質問に答えるコンテンツと出典を書く

回答に必要な対象・条件・例外・時点を本文に入れ、出典につなぐ。執筆者・発行主体・文書の対象を区別し、再掲載や改修後も日付と根拠を保つ。

§ 01SEO / GEO / AEO

回答・条件・根拠を一緒に直す

最初の段落に質問への答えを書き、続けて適用対象・条件・手順・例外・基準時点・根拠を説明する。開館時間の案内なら、時間・休館日・適用開始日を一緒に示す。

架空の図書館の修正前の案内は「誰もが便利に利用できる空間です」。修正後は「日曜日は午前10時から午後5時まで開館します。毎月第1日曜日と祝日は休館します。この時間割は2026年10月から適用します」。直後に、この開館時間の根拠リンクを付ける。利用料・対象・申込方法も同じように不足する条件を補う。

原稿データには公開日・実質的な更新日・事実の発生日・適用開始日を分けて保存する。1つの日付フィールドをすべてに使うと、過去の事実が新しい出来事に見える場合がある。変更した案内には何がいつ変わったかを書き、以前の告知に最新案内へのリンクを付ける。執筆者・機関・根拠文書の名前は実際に確認できる値を使う。

同じ判断に必要な内容を1ページで説明する。タイトルと見出しは実際の主題にし、条件比較は表、手続きは順序で示す。FAQは読者の実際の質問があるときに使う。各回答には対象・条件・例外・根拠を含め、公開後は実際の質問でその答えが使われるか観測する。

「誰もが便利に利用できる」には、日曜日に訪問できるか判断する事実がない。修正文には時間・例外・適用日があり、利用者は訪問日と照合できる。検索・回答ツールもこの箇所から同じ条件を得る。短い回答にも例外を添えるのは、一部だけが取り出されたときの意味の変化を減らすためだ。

§ 02SEO / GEO / AEO

質問の種類に合わせて答えと根拠を書く

質問によって説明順は変わる。定義型は意味と区別、方法型は順序と失敗、比較型は共通基準、条件型は対象と例外、時点型は適用期間を説明する。次の表は図書館案内をこの5種類で直した例だ。

質問の種類に合わせて答えと根拠を書く
定義型
情報が不足する文
canonicalを設定してください。
補う答え
canonicalは重複文書の代表URLを示すシグナルだ。同じ記事のUTM付きURLを基本URLにつなぐ。
方法型
情報が不足する文
オンラインで申し込んでください。
補う答え
対象年齢を確認 → 申込フォームを送信 → 完了番号を確認。番号がなければ受付状況を確認する。
比較型
情報が不足する文
どちらのプログラムもよいです。
補う答え
同じ表で対象・内容・曜日・費用・申込条件を比較する。未確認の費用は推測しない。
条件型
情報が不足する文
日曜日も開館します。
補う答え
日曜日10~17時。毎月第1日曜日と祝日は休館する。
時点型
情報が不足する文
開館時間が変わりました。
補う答え
2026年10月から適用する。旧案内には当時の期間と現在の案内へのリンクを示す。
§ 03SEO / GEO / AEO

原資料・経験・執筆主体を確認できるように書く

entityは区別できる人・機関・場所・文書などを指す。同名の図書館は地域・公式住所・運営主体で識別する。執筆者author、発行主体publisher、説明対象about、同一対象の識別リンクsameAs、主張の根拠citationを実際の関係に合わせて使う。

E-E-A-TはExperience・Expertise・Authoritativeness・Trustworthiness、つまり経験・専門性・権威性・信頼性を指す。Googleはこれを直接的な単一のランキング要因とは説明していない。経験の範囲・主張の根拠・執筆主体を書き、読者が確認できる資料をつなぐ。コンテンツ品質ガイド

経験を説明するときは、実施したことと当時の条件を併記する。例えば画像圧縮の結果には元画像・変換画像の容量と、同じ機器で測った表示時間を添える。読者はファイルが小さくなった程度と表示が速くなった程度を別々に読める。論文を引用するときも対象・実験条件・測定指標を添える。

§ 04SEO / GEO / AEO

執筆者・対象・発行主体と出典を区別する

紹介対象と書き手が異なるならauthorとaboutで分ける。発行機関はpublisherに入れる。例えば図書館職員が作家招待イベントを紹介した場合、authorは職員、aboutはイベント、publisherは図書館だ。

サイト・発行機関・紹介対象・文書には一貫した識別子を使う。文書の@idに毎回新しい公開revision番号を付けると、修正ごとに別文書として表現される場合がある。例えば文書IDに基づくhttps://example.com/#document-123を維持し、日付と本文だけを現在の公開版に更新する。同じ識別子なら、複数の構造化データから同一文書を参照できる。

現在の名前・役割・運営主体・住所を本文で説明し、対応する構造化データにも同じ値を使う。過去の役割や以前の運営方式は期間を付けて区別する。同姓同名や似たサービス名がある場合、地域・業務・公式紹介リンクを示して読者が識別できるようにする。

sameAsは同じ対象を識別するURLをつなぐ。機関の公式紹介、Wikipedia記事、Wikidata項目を使える。その機関の休館発表記事は、当該主張のcitationとしてつなぐ。対象の身元と個別主張の出典をそれぞれ表す属性だ。Schema.org sameAs

根拠文書は主張のそばにリンクし、資料の日付・節・項目を記す。移管記事なら原資料をisBasedOn、開館時間の根拠ならcitationの関係で表せる。読者がリンクを開き、同じ期間の同じ主張を読めるか確認する。

運営主体と問い合わせ・訂正の窓口は読者が実際に見つけられる場所に置く。記事の執筆者、資料の発行機関、サイト運営者を混同しないよう名前と役割を示す。個人情報の案内が必要な機能では、実際の収集・利用方法に合う説明をつなぐ。問い合わせリンクは実際の連絡画面につなぎ、訂正依頼を受けた後に本文を更新する担当者と処理経路を決める。

同名の図書館2館が異なる時間に開く場合、名前だけの引用ではどちらの時間か確認しにくい。地域・住所・運営主体・公式案内リンクを併記すれば、対象を区別する根拠になる。sourceやcitationのリンクでは、同じ分館・期間の運営条件が実際に示されているか読む。執筆者名やリンク数を増やすことより、この関係が正確であることが検証につながる。

訂正依頼では、どの文がどの根拠と食い違うか確認する。「第1日曜日も開館する」という誤りを見つけたら、原文の休館例外を直し、変更理由と適用日を残す。関連記事・共有説明・自前の回答資料も同じ公開版から更新する。執筆主体と問い合わせ窓口は、読者が誤りを伝え、修正後の事実を再確認するために使われる。

§ 05SEO / GEO / AEO

再掲載でも日付・関連記事・共有画像を保つ

外部記事の収集時刻は、原文公開日や出来事の発生日とは異なる。収集処理が再実行されたという理由でdateModifiedやサイトマップのlastmodを更新しない。一覧全体の更新日を個別記事の最大更新日から計算する場合も注意する。撤回・並べ替え・紹介文修正を反映できないなら、一覧の実際の更新記録を作るかlastmodを省略する。

出来事の日付を補う場合は、確認した日付と根拠URLを一緒に保存する。日付だけが分かる事実に任意の時刻を付けない。タイムゾーン付き公開時刻は明示したタイムゾーンへ変換するが、YYYY-MM-DDの出来事の日付を変換で前日や翌日に変えない。本文の日付ラベルも出来事・報道・公開を分ける。

過去記事に新しい事実を補う場合は、元の内容のそばに変更時点と後続案内を添える。例えば2025年の申込案内には当時の資格を残し、「2026年の申込資格」リンクを追加する。この関係をrevisionに保存すれば、再収集・移管後も補足説明を維持できる。

関連記事はURL文字列を長く保存する方式より、コンテンツIDでつなぎ、表示時点の有効な公開版からタイトル・URLを取得できる。記事が撤回されたらリンクも外す。リンク修正のために撤回済みの過去記事を勝手に再公開しない。

代表画像がある記事は、その公開画像と説明を共有カードにつなぐ。全記事に同じ既定画像が必要か確認し、画像がない場合の既定値を設ける。収集型投稿は原文URLと原文公開日を保ち、原文に合うSocialMediaPostingなどの型を検討する。写真しかないのにVideoObjectを追加しない。

画面の公開日には読みやすい文と機械が解釈できる日付を両方用意する。例えば保存時刻が2026-10-23T09:00:00+09:00で韓国時間表示なら、以下のようにtimeのdateTimeと可視日付を合わせる。出来事の日付・公開日・更新日は別のラベルで表示する。

<p>公開日 <time dateTime="2026-10-23T09:00:00+09:00">2026年10月23日</time></p>

Article・NewsArticleに代表画像がある場合、imageにもその記事の公開画像URLをつなぐ。URLの存在だけでなく、未ログインのリクエスト、クローラーのアクセス、画像の実内容を確認する。Articleの属性ガイドに基づきauthor・datePublished・dateModified・imageを本文と照合する。

§ 06SEO / GEO / AEO

現在の案内と過去の時間割の関係を本文に残す

架空の図書館の現在の案内は「日曜日10~17時、第1日曜日と祝日は休館、2026年10月から適用」と書く。旧案内には当時の適用期間と現在の案内へのリンクを付ける。現在ページの作成日を過去文書に上書きしない。

「今度の日曜日に利用できるか」には、その日が第1日曜日や祝日かも判断する必要がある。本文に時間しかなければ条件が不足する。開館時間案内・休館告知・適用期間をつなぎ、外部回答が例外まで説明するか観測する。

出典リンクは実際の開館時間案内の該当箇所につなぐ。案内が変わったら現在の本文と更新日を更新し、過去文書は記録として残す。2つのページが同じ事実の異なる有効期間を扱う関係を、読者とクローラーが読めるようにする。

§ 07SEO / GEO / AEO

操作を目的とする文・リンク・日付を避ける

キーワードスタッフィングは順位を狙い、同じ単語や地名を不自然に繰り返す行為だ。クローキングは検索順位を操作したり利用者を欺いたりするため、人と検索エンジンに異なる内容を見せる行為だ。隠しキーワード、無関係な転送、順位操作のためのリンク取引、読者価値のない大量文書はGoogleのスパムポリシーに関わる。検索スパムポリシー

AIが作った文も原資料と照合し、日付・対象・例外を直す。同じ文の地名だけを変えて大量作成すると、各地域に必要な住所・日程・申込条件が抜けやすい。読者が訪問や申込を判断できるよう、その地域の情報を補う。

Schema.orgのFAQPage型と検索エンジンの表示機能は別だ。Googleは2026年5月7日からFAQリッチリザルトを表示せず、関連文書を削除したと発表した。FAQは読者の実際の質問に答えるときに作り、過去の表示資格の説明を現在の対応状況として扱わない。画面にないFAQ・レビュー・商品・動画をマークアップしない。llms.txtも利用する消費側を確認する任意項目で、Google検索では不要だ。Google変更履歴 · 生成型検索ガイド

§ 08SEO / GEO / AEO

ブリーフを実際の案内文にする

企画編のブリーフを案内文にすると次のようになる。運営計画Aの対象・日程、受付案内Bの期限・定員、取消案内Cの取消方法を申込順に配置した。

2026年11月 家族読書プログラム申込案内

小学校1~3年生の子どもと保護者が一緒に本を読むプログラムです。11月8日と15日の日曜日、午後2~3時に児童室で行います。子ども1人と保護者1人で両方の回に参加します。参加費は無料です。読みたい本を1冊お持ちください。対象・日程・同伴条件の根拠は運営計画Aです。

受付期間は10月26日午前9時から11月5日午後6時までです。時刻はすべて韓国標準時です。先着10家族で、定員に達すると早期締め切りとなります。プログラム一覧からこの案内の「申し込む」を開き、参加者情報を送信してください。申込番号が表示された受付確認画面まで確認すると受付完了です。受付期間・定員・完了基準の根拠は受付案内Bです。

参加できなくなった場合は、11月6日午後6時まで申込確認画面から取り消せます。取消画面が使えない場合や同伴条件を確認したい場合は、プログラム担当者の問い合わせ窓口を利用してください。取消期限と問い合わせ担当の根拠は取消案内Cです。

公開日は2026年10月24日です。この案内は2026年11月のプログラムに適用します。募集終了後は受付終了を表示し、次の募集案内が出たらリンクします。

最初の段落で子どもの学年と同伴できるかを判断する。次の段落で受付期限と定員を読み、申し込む。申込番号が受付完了を知らせる。募集後も適用年と日程を残せば、過去のプログラムを探す人が当時の条件を確認できる。

回答ツールはこの案内を読み、「小学2年生の子どもと第2日曜日に行けるか」という質問で学年・曜日・同伴条件を照合できる。両方の回への参加が必要という文が抜けると、1回しか参加できない家族に誤って紹介しかねない。そのため最初の段落に3条件をまとめた。公開後、同じ質問への答えと引用箇所で条件が維持されるか確認する。

§ 09SEO / GEO / AEO

動画の区間・原文・要約をつなぐ

動画タイトルだけの引用では、どの部分が主張を支えるか確認しにくい。発言動画には発言者・記録日・区間の開始と終了・書き起こし・原本URLを保存する。要約は別フィールドに置き、条件の抜けを原文と比較する。テキストを読む検索・回答経路にはこの文が資料となり、読者は区間リンクから直接確認できる。

次の実習は2枚の案内を4秒ずつ表示する無音動画だ。1枚目には日曜日10~17時、2枚目には第1日曜日と祝日は休館と記す。本文の「動画に表示した文」は画面の原文で、「内容の要約」は2区間をまとめた日本語の説明だ。発言の書き起こしでも、原文と要約を同じように分ける。

画像実習フォルダーに以下のmake-video-demo.mjsとvideo.htmlをそれぞれ保存する。ffmpegがPATHに必要だ。node make-video-demo.mjsを実行するとtalk.mp4ができる。画像サーバーを起動し、http://127.0.0.1:3031/video.html?t=4を開くと2つ目の区間に移る。

import sharp from 'sharp'; import { mkdtemp, rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { spawnSync } from 'node:child_process'; // Node.js 22、sharp、PATH上のffmpegが必要。8秒の無音案内動画を作る。 const dir = await mkdtemp(join(tmpdir(), 'notes-video-')); try { const lines = ['Sunday: 10:00–17:00.', 'Closed: first Sunday and public holidays.']; for (const [i, line] of lines.entries()) { await sharp(Buffer.from(`<svg width="1280" height="720"> <rect width="1280" height="720" fill="#172d48"/> <text x="640" y="360" text-anchor="middle" fill="white" font-family="sans-serif" font-size="48">${line}</text> </svg>`)).png().toFile(join(dir, `${i}.png`)); } const result = spawnSync('ffmpeg', ['-hide_banner', '-loglevel', 'error', '-y', '-loop', '1', '-t', '4', '-i', join(dir, '0.png'), '-loop', '1', '-t', '4', '-i', join(dir, '1.png'), '-filter_complex', '[0:v][1:v]concat=n=2:v=1:a=0[v]', '-map', '[v]', '-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-movflags', '+faststart', fileURLToPath(new URL('./talk.mp4', import.meta.url))], { stdio: 'inherit' }); if (result.error || result.status !== 0) throw result.error ?? new Error('ffmpeg failed'); } finally { await rm(dir, { recursive: true, force: true }); }

<!doctype html><html lang="ja"><head><meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>日曜日の開館案内動画</title> <style>body{max-width:50rem;margin:24px auto;padding:0 16px;font-family:sans-serif;line-height:1.7}video{width:100%}</style> </head><body><h1>日曜日の開館案内動画</h1> <p>架空の図書館編集チーム · 制作 <time datetime="2026-10-01">2026年10月1日</time> · 2026年10月から適用</p> <video id="video" controls preload="metadata" src="/talk.mp4"></video> <h2>動画に表示した文</h2> <p><a href="?t=0" data-start="0">0~4秒</a> Sunday: 10:00–17:00.</p> <p><a href="?t=4" data-start="4">4~8秒</a> Closed: first Sunday and public holidays.</p> <h2>内容の要約</h2> <p>日曜日は10~17時に開館します。第1日曜日と祝日は休館します。</p> <p>2枚の案内を動画にする実習です。音声はありません。</p> <p><a id="share" href="?t=0">選択した区間のURL</a></p> <script> const video = document.querySelector('#video'); const share = document.querySelector('#share'); function seek(value) { const seconds = Number(value); if (!Number.isFinite(seconds) || seconds < 0 || seconds >= video.duration) return; video.currentTime = seconds; const url = new URL(location.href); url.searchParams.set('t', String(seconds)); history.replaceState(null, '', url); share.href = url.href; } video.addEventListener('loadedmetadata', () => seek(new URL(location.href).searchParams.get('t') ?? 0)); document.querySelectorAll('[data-start]').forEach(link => link.addEventListener('click', event => { if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; if (video.readyState < 1) return; // metadataがなければ通常のリンクとして移動する。 event.preventDefault(); seek(link.dataset.start); })); </script></body></html>

make-video-demoはsharpで案内画像2枚を作り、ffmpegのconcatフィルターでつなぐ。spawnSyncには引数配列を渡すため、文字列をシェルコマンドとして実行しない。video.htmlのloadedmetadataは動画の長さを読める時点だ。seekは秒数の有効性を確認してcurrentTimeを変える。区間リンクを押すと再生位置と共有URLのt値が一緒に変わる。新しいウィンドウでURLを開いても、loadedmetadataの後で同じ位置に移る。

「毎週日曜日にいつでも利用できる」という要約は、最初の画面の時間だけを読み、2枚目の例外を落としている。0秒のリンクだけではこの誤りを見つけにくい。時間の主張には最初の区間、休館例外には2つ目の区間をつなぎ、回答全体は両方の条件を使う。リンクが実際に移動するかと、その区間が文を裏付けるかは別の検査だ。

video.htmlは動画と説明を見るページURL、talk.mp4はメディアファイルURLだ。外部プレーヤーをiframeで入れる場合の埋め込みURLも別にある。VideoObjectのcontentUrlにはメディアファイル、embedUrlにはプレーヤーURLを入れる。動画検索を目指すなら、動画が主内容の視聴ページ、安定したサムネイルと動画アクセス、関連メタデータを一緒に用意する。Googleの動画ガイド

秒単位の移動では、ブラウザーがメディアの一部バイトを要求する場合がある。実習サーバーはRangeを読み、該当部分を206とContent-Rangeで返し、ファイル外の要求には416を返す。全ファイルを200で送るだけのサーバーでは、currentTimeを指定しても再生位置が戻ることがある。移動コードとファイル提供経路を併せて確認する必要がある。HTTP Rangeリクエスト

— FIN —