今日はそれを、感覚ではなく数字で確かめてみます。自分のサイトを機械に全部読ませたら、思っていたよりずっとひどい結果が出ました。正直、書くのが嫌になる数字です。でも、そのまま出します。
✅ この記事の結論(先に要点だけ)
- 1作ったもの:自分のサイトの全記事を読み込み、どこからもリンクされていない記事と、今日足すべきリンクを提案するツール(Python 約200行)
- 2かかった時間:約55分。実行は408記事を読み込んで10.6秒です
- 3結果:公開408記事のうち、被リンクゼロが394件(96.6%)。ただし提案の質は3件中1件しか実用になりませんでした
PART1 なぜ、内部リンクは張られないのか
内部リンクというのは、自分のサイトの記事から、自分の別の記事へ張るリンクのことです。これが検索エンジンの評価上も、読者の回遊上も効くのは、ブログをやっている人なら誰でも聞いたことがあると思います。私も知っていました。知っていて、やっていませんでした。
「やる気がないから」で片づけると、明日も同じことになります。なので、なぜを5回だけ降りてみました。
- 1【事実】そもそも張られていません。
408記事あって、内部リンクは133本でした。1記事あたり0.33本です。ほとんどの記事が、どこともつながっていません。 - 2【事実】記事を書く瞬間、過去記事の一覧が手元にありません。
書いているのはエディタの中です。そこに「関連しそうな過去記事」は表示されません。探すには別タブで自分のサイトを検索する必要があります。 - 3【推論】400本を覚えていられる人はいません。
ここからは私の推測ですが、記事数が50本を超えたあたりで、人間の記憶では管理できなくなるんだと思います。20本なら思い出せます。400本は無理です。 - 4【推論】だから「あとでまとめて張ろう」に回ります。
そしてその「まとめて」は、408記事を見直す作業になります。休日を丸ごと使う規模です。当然、着手されません。私は1年以上着手していませんでした。 - 5【推論】必要なのは「全部直すリスト」ではなく「今日やる3件」でした。
394件のリストを渡されても人は動きません。動くのは「この記事のこの言葉に、この記事へのリンクを足してください」という1対1の指示です。だから設計方針は、提案を3件に絞ることに決めました。
この5段目が今日の収穫でした。最初は「全記事の関連度マップを作ろう」と考えていたんです。でもそれは、見て満足して終わる資料になります。作るべきは地図ではなく、今日の指示書でした。
PART2 AIに3役で議論させました
今日も「発案役」「反対役」「実装役」の3人を立てています。前回同様、反対役にはっきり潰させるのがコツです。
| 案 | 反対役の指摘 |
|---|---|
| A 全記事の内部リンク健診 | 400記事を全部読むと重い。リンク候補の精度も、単純な一致では出ないはず |
| B 買う前に5問答えさせる投資判断メモアプリ | 動かしても「画面ができた」以上の数字が出ない。効果を証明できない |
| C 明細から継続課金を自動検出する | 明細は個人情報の塊。記事に実例を出せない。読者も再現できない |
| D 自作AIスキルの棚卸しレポート | 読む人が限られる。同じことをしている人が少なすぎる |
| E 過去記事のタイトルをAIで書き換える | 効果が出たか分かるまで数ヶ月かかる。今日の記事にできない |
実装役が選んだのはAでした。決め手は「自分の実データで、大きな数字が出る可能性がある」という点です。BやEは、作れても結果が見えません。見えない改善は続かない、というのは前回学んだところでした。
2巡目の「3日で飽きる理由」も聞いています。答えは「リストを見ても、どこを直せばいいか分からないと放置される」。ここから、提案を1日3件に絞る設計が出てきました。前回もそうでしたが、この2巡目がいちばん設計を変えます。
PART3 実装:200行で全記事を診断しました
- 1WordPressのREST API(サイトの中身を機械が読める形で返す窓口)から全公開記事を取得する
- 2各記事の本文からリンク先を抜き出し、自サイト内のものだけ数える
- 3一度もリンクされていない記事(孤立記事)を集計する
- 4孤立記事のタイトルから言葉を切り出し、その言葉が本文に出てくる別記事を探して「ここに張る」と提案する
def extract_links(html, host):
"""本文中の内部リンク先スラッグを返す"""
slugs = set()
for m in re.finditer(r'href=["\']([^"\']+)["\']', html or "", re.I):
u = m.group(1)
if u.startswith("#") or u.startswith("mailto:"):
continue
if u.startswith("http") and host not in u:
continue # 外部リンクは数えない
path = urllib.parse.urlparse(u).path.strip("/")
if path:
slugs.add(path.split("/")[-1])
return slugs
# 被リンクを集計する
inbound = defaultdict(set)
for p in posts:
for slug in extract_links(p["content"]["rendered"], host):
if slug in by_slug and slug != p["slug"]:
inbound[slug].add(p["slug"])
# 一度もリンクされていない記事
orphans = [p for p in posts if not inbound[p["slug"]]]
1回目は、提案がひどかったです
集計はすぐ動きました。問題は提案のほうです。1回目に出てきた提案がこれでした。
提案1:この記事の「2026年8月18日」という言葉に、別の記事へのリンクを足してください(本文中に3回)
日付です。タイトルから言葉を切り出すときに、日付や数字をそのまま拾ってしまっていました。「2026年8月18日」にリンクを張る人はいません。当たり前なんですが、書いているときは気づきませんでした。
もうひとつ問題がありました。「JX金属」という言葉は本文中に28回出てくるんですが、この言葉はほぼ全記事に出てきます。どこにでもある言葉を手がかりにすると、リンク先が特定できません。
対策は2つです。日付や数量だけの語を除外することと、全記事の2割を超えて登場する語は手がかりにしないこと。後者は、ありふれた言葉ほど情報が少ないという考え方で、検索の世界では昔から使われている発想です。合わせて15行ほどの追加でした。
📊 実行結果(2026年8月24日 実行)
公開記事 408件/内部リンク 133本(1記事あたり0.33本)
被リンクゼロの記事 394件(96.6%)
処理時間 10.6秒/スクリプト 約200行
96.6%です。正直、画面を見て一度手が止まりました。400本以上書いてきて、そのほとんどがどこともつながっていなかったということです。毎日書くことばかり考えて、書いたものをつなぐことを一度も考えていませんでした。
修正後に出た提案のうち、いちばん納得できたのはこれです。「半導体株はなぜ3日で急反発したのか」という記事の本文に「FOMC」が11回出てくるので、そこからFOMC週を扱った記事へリンクを張る、というもの。これは読者の動線としても自然です。
PART4 プログラムを書かずに同じことをするプロンプト
記事数が数十本なら、AIに直接やらせたほうが速いです。記事タイトルの一覧をコピーして渡すだけで成立します。
以下は、私のブログの記事タイトル一覧です。 内部リンクを足すべき組み合わせを提案してください。 【提案のルール】 ・1回の出力は3件まで。多いと着手できないので増やさないこと ・1件につき「編集する記事」「その記事のどの言葉に張るか」 「リンク先の記事」の3点を必ずセットで書く ・張る言葉は、日付・数字・記事番号は使わない ・どの記事にも出てくる一般的な言葉(ブランド名など)は 手がかりにしない。リンク先が特定できないため ・すでにリンクがありそうな組み合わせは提案しない 【出力】 提案1〜3を上記3点セットで。各件に「なぜその組み合わせか」を1行。 【記事タイトル一覧】 (ここに貼り付け) 推奨は不要です。最終判断は私が行います。
⚠️ 注意ポイント:「1回3件まで」を入れるのが要です。制限しないとAIは20件でも30件でも出してきます。そして20件出た瞬間に、人はやらなくなります。私が今日いちばん実感したのはここでした。
できなかったこと(正直に書きます)
- 提案の質は、3件中1件しか実用になりませんでした。納得できたのはFOMCの1件だけ。残り2件は「8月前半」「コピペOK」という語が選ばれていて、リンク文言としては不自然です。打率3割です。
- 意味を見ていません。やっているのは言葉の一致だけで、記事の内容が本当に関連しているかは判定していません。ここは本来、AIに読ませるべき部分です。
- リンクを自動で張ってはいません。提案を出すところまでで、本文の書き換えは手作業です。自動で書き換えるのは、記事を壊すリスクが大きすぎると判断しました。
- 孤立記事の96.6%という数字は、少し割り引いて見る必要があります。カテゴリページやサイドバーからのリンクは数えていません。あくまで「本文中のリンク」だけの集計です。それでも低すぎますが。
- 向いていない人がいます。記事数が30本以下なら、頭の中で足ります。100本を超えたあたりから効いてくる道具です。
次にやること
打率3割では実用とは言えません。次回は提案の候補をAIに読ませて、本当に関連している組み合わせだけ残すところを試します。言葉の一致で候補を絞ってから、意味の判定をAIに任せる。この順番なら、渡す量が少なくて済みます。
前回のニュースフィルターと、まったく同じ構造なんですよね。機械で粗く捨てて、残ったものだけAIに読ませる。2日連続で同じ形に行き着いたのは、たぶん偶然ではないと思っています。
よくある質問
Q. 内部リンクは、そんなに大事ですか?
A. 読者の回遊という意味では確実に効きます。1記事読んで帰るか、2記事読んで帰るかの差です。検索エンジンの評価への効果は断言できませんが、少なくとも「つながっていない記事が96.6%」という状態が良いとは思えません。
Q. 関連記事を自動表示するプラグインでは足りませんか?
A. 記事の下に出る自動表示と、本文中の文脈に沿ったリンクは役割が違います。読んでいる途中で「これ何だっけ」と思ったところに置くリンクのほうが、クリックされやすいと感じています。
Q. 1日3件だと、394件終わるのに何ヶ月もかかりませんか?
A. かかります。ただ、1日3件なら続きます。休日を丸ごと使う計画は、1年以上着手できませんでした。3件×20日で60件です。ゼロよりはるかにマシだと考えています。
まとめ
今日いちばん効いたのは、道具そのものより「394件のリストではなく、今日の3件を出す」という設計判断でした。全部を可視化しても人は動きません。動くのは、次の一手が1つに絞られているときだけです。
そして、96.6%という数字を見られたこと自体が収穫でした。測っていなければ、明日も同じように書いて、同じようにつながらないままだったと思います。まず測る。話はそれからでした。
Udemy講座【ゼロから始めるAI投資】応用講座 暴落対応編
暴落対応・決算分析・ポートフォリオ管理をChatGPTとClaudeで実践する動画講座です。まずは紹介動画から。
▶ 紹介動画を見る
※Udemyの講座ページに移動します。価格は決済画面でご確認ください
※本記事は情報提供を目的としたものであり、特定銘柄の売買を推奨するものではありません。AIやプログラムの出力には誤りが含まれる場合があります。数値は2026年8月24日に当サイトで実際に実行した結果です。投資の最終判断はご自身の責任でお願いします。
🎁 無料プレゼント3点セット
複利シミュレーター(Windowsアプリ)・暴落時のAI相談プロンプト集(PDF・7本)・相場シナリオ要約(PDF・毎月更新)を、LINEの友だち追加だけで受け取れます。
無料で受け取る
