ipa記事のクリックが半分になったのは、見出しを組み替える9日前からだった

ipaインストールの記事に入る検索クリックは、8月が1日あたり6.42件でした。10月1日から10日は2.60件です。半分より少し多く減っています。
前回の記事に、10月のクリックが減った理由は分からないと書きました。減り方が大きかったのは、このサイトのクリックの大半を取っている記事です。毎日1本ずつ書き足す実験より先に、ここを説明できないと落ち着きません。
まず疑ったのは自分の編集
10月10日の20時45分に、この記事の見出しを組み替えました。読者が作業する順に並べ直す更新です。クリックが減って見えたのはその直後なので、最初に疑ったのはこれでした。
どの見出しを変えたかは、Gitの差分から取れます。
git show 6fa8d02 -- src/content/posts/how-to-install-ipa-itunes.md | grep -E '^[-+]## '
+## PCなしで入れられる場合
-## PCなしで導入できるケース
-## iOS 26.2以降の日本での代替アプリ配信
+## 入手元と署名を確かめる
+## 始める前に確かめる条件
-## PCから署名済みipaをインストールする
+## インストールの手順
-## ipaファイルとは
-## インストール前の準備
-## 手動インストールより適した配布方法
-## インストール方法
-## インストール後の設定
+## インストールできた後に起動するまで
-## よくあるトラブルと対処法
+## うまくいかないときの対処
-## おわりに
+## 仕組みと背景
+## 次に読む記事
H2を10本外して、8本を足しています。検索結果に、見出しへ直接飛ぶリンクが並ぶ場合もあります。見出しをこれだけ変えれば、影響が出てもおかしくありません。
日別に並べると、順番が合わない
AIエージェントがSearch Console(sc-domain:hibanas.net、Google検索)から取得しました。期間は2026年8月1日から10月21日、dimensionsはdate、page contains how-to-install-ipa-itunes(この記事の合計)です。さらにpage contains #で見出し付きURL、page notContains #で通常URLに分けました。取得した数字を手作業で配列に書き写してdaily.csvを作りました。CSVに入っているのは8月1日から10月19日の80日分です。数字をCSVへ書き写す段階で間違いが入りやすいので、後で突き合わせています。
CSVの列は次のとおりです。見出し付きURL(#インストール前の準備のように、末尾に見出しがつくもの)は、通常のURLと分けて集計しています。plain_*が通常URL、anchor_impressionsが見出し付きURLの表示回数、total_*がpageにhow-to-install-ipa-itunesを含むページの合計(通常URLと見出し付きURLを分けない)です。
date,plain_clicks,plain_impressions,anchor_impressions,total_clicks,total_impressions
写し間違いを探す検査は2つです。通常URLと見出し付きURLの表示回数を足すと、この記事の合計(total_impressions)に戻ること。もう1つは、前回の記事で出した95件と、9月22日から10月18日の通常URLのクリックが合うことです。
検査スクリプト(check.py)
import csv
rows = list(csv.DictReader(open('daily.csv')))
bad = [r['date'] for r in rows
if int(r['plain_impressions']) + int(r['anchor_impressions']) != int(r['total_impressions'])]
print('日数', len(rows), '/ 合計が合わない日', len(bad))
w = [r for r in rows if '2026-09-22' <= r['date'] <= '2026-10-18']
print('9/22-10/18 通常URLのクリック', sum(int(r['plain_clicks']) for r in w))
for r in rows:
if '2026-09-24' <= r['date'] <= '2026-09-27':
print(r['date'], '通常', r['plain_impressions'], '見出し付き', r['anchor_impressions'])
check.pyは、daily.csvと同じ一時ディレクトリ($TMPDIRの下)に置いて、そこで実行します。
python3 check.py
実行結果です。
日数 80 / 合計が合わない日 0
9/22-10/18 通常URLのクリック 95
2026-09-24 通常 61 見出し付き 245
2026-09-25 通常 69 見出し付き 91
2026-09-26 通常 51 見出し付き 0
2026-09-27 通常 81 見出し付き 3
80日すべてで合計が合い、95件も前回と一致しました。数字は使えます。
期間ごとの平均です。
| 期間 | 日数 | クリック/日 | 通常URLの表示/日 | クリック率 |
|---|---|---|---|---|
| 8月 | 31 | 6.42 | 80.5 | 8.0% |
| 9月1日から24日 | 24 | 5.75 | 75.2 | 7.6% |
| 9月25日から30日 | 6 | 5.17 | 62.8 | 8.2% |
| 10月1日から10日 | 10 | 2.60 | 53.2 | 4.9% |
| 10月11日から19日 | 9 | 1.89 | 44.3 | 4.3% |
落ちたのは10月1日からです。組み替えは10日の夜でした。9日早く落ちているので、少なくとも最初の落ち込みを組み替えのせいにはできません。
回数が少ないので、偶然かどうかも確かめました。日数どおりにクリックが割り振られる前提で、二項分布の厳密計算をしています。
計算したスクリプト(split_test.py)
import csv
from math import comb
rows = list(csv.DictReader(open('daily.csv')))
def clicks(a, b):
r = [x for x in rows if a <= x['date'] <= b]
return sum(int(x['plain_clicks']) for x in r), len(r)
def tail_p(k, n, p):
# 片側: 観測値以上になる確率(二項分布の厳密計算)
return sum(comb(n, i) * p**i * (1 - p)**(n - i) for i in range(k, n + 1))
# 1) 9/1-9/24 と 10/1-10/10 を比べる(組み替えの前同士)
a, na = clicks('2026-09-01', '2026-09-24')
b, nb = clicks('2026-10-01', '2026-10-10')
print(f'9/1-9/24 {a}件 / {na}日 = {a/na:.2f}')
print(f'10/1-10/10 {b}件 / {nb}日 = {b/nb:.2f}')
n = a + b
p0 = na / (na + nb) # 日数どおりに割れたら、9月側に入る確率
print(f'9月側が{a}件以上になる確率 {tail_p(a, n, p0):.5f}')
# 2) 10/1-10/10 と 10/11-10/19 を比べる(組み替えの前後)
c, nc = clicks('2026-10-11', '2026-10-19')
print(f'10/11-10/19 {c}件 / {nc}日 = {c/nc:.2f}')
n2 = b + c
p1 = nb / (nb + nc)
print(f'前半が{b}件以上になる確率 {tail_p(b, n2, p1):.3f}')
# 3) 見出し付きURL側のクリック
print('見出し付きURLのクリック合計', sum(int(x['total_clicks']) - int(x['plain_clicks']) for x in rows))
python3 split_test.py
9/1-9/24 138件 / 24日 = 5.75
10/1-10/10 26件 / 10日 = 2.60
9月側が138件以上になる確率 0.00004
10/11-10/19 17件 / 9日 = 1.89
前半が26件以上になる確率 0.191
見出し付きURLのクリック合計 1
9月から10月初めの落ち込みは、偶然とは考えにくい差です。一方、組み替えの前後(2.60と1.89)は確率が0.191で、この件数では区別できません。1日2件前後の話なので、1件の増減で結論が変わります。
見出し付きURLの表示回数は、勘違いのもとだった
表の外に、気になる数字がありました。見出し付きURLの表示回数が、9月24日の245から25日の91、26日には0へ落ちています。これを見て、前回「表示回数が減った」と書いた理由はこれだと思いました。
でも、サイト全体の日別(9月20日から10月12日、dimensions=date、ページのフィルタなし)には段差がありません。
| 日付 | サイト全体の表示回数 |
|---|---|
| 9月24日 | 78 |
| 9月25日 | 103 |
| 9月26日 | 72 |
| 9月27日 | 119 |
見出し付きURLの行は、ページ別の集計にだけ現れる数え方の違いのようです。なぜ9月26日にほぼ消えて、10月6日から11日にまとまって戻ったのかは分かりません。クリックも、80日間で1件だけでした。このURL側を見て減少の理由を探しても、手がかりにはならない。そう判断して、以後の比較は通常URLだけで行っています。
検索語別では、順位が動かないのにクリック率だけ落ちたものがある
通常URLについて、9月1日から24日(24日間)と10月1日から19日(19日間)を検索語別に比べました。dimensions=query、pageがhow-to-install-ipa-itunesを含み#を含まない(通常URL)で取得しました。返ってきた検索語は9月が60語、10月が51語で、表にはそのうち5語を載せました。クリックと表示回数は期間内の合計、順位は平均です。
| 検索語 | 9月 クリック/表示/順位 | 10月 クリック/表示/順位 |
|---|---|---|
ipa インストール | 9 / 78 / 7.9 | 0 / 49 / 9.4 |
iphone 単体 ipa インストール | 4 / 73 / 7.2 | 0 / 21 / 9.0 |
ipaファイル インストール | 5 / 58 / 7.1 | 1 / 45 / 8.3 |
ipaファイル 開く iphone | 6 / 112 / 6.8 | 1 / 59 / 7.1 |
ios ipa インストール | 4 / 22 / 4.7 | 1 / 28 / 4.9 |
上の3行は、順位が1から2ほど下がっています。ipa インストールは7.9位から9.4位です。1ページ目の中での後退でも、クリックには効きそうです。
ただ、下の2行は違います。ios ipa インストールの順位は4.7位から4.9位でほぼ同じで、表示回数は22から28へ増えました。それでもクリックは4件から1件です。1日あたりにすると、表示回数は0.92から1.47へ増えて、クリックは0.17から0.05へ減りました。検索結果の上に、別のものが増えたのかもしれません。私の記事側からは、そこまで見えません。
どの行も件数が1桁です。ここから言えるのは、順位の後退だけでは説明が足りないという点までです。
触らないと決めた
分かったことは3つです。落ち込みは10月1日から始まっていて、10日の組み替えより早い。見出し付きURLの表示回数の消失は、減少の原因ではない。順位の後退では、一部の検索語しか説明できない。
組み替えを元に戻すかも考えました。でも、今は戻しません。戻すとまた変更が1つ増えて、あとから原因を切り分けられなくなります。10月11日以降のクリックは9日で17件しかなく、組み替えが害になったのか判断する材料もありません。
次は、記事をいじらずに2週間、同じCSVへ日別の数字を足します。10月1日の前後で、ほかに変えたものがないかをリポジトリの履歴から洗い出すのも並行します。通常URLの日別の平均掲載順位では、10月2日の順位が9.09、5日が12.09と一時的に悪かった点も、気になっています。
このサイトでいちばん読まれている記事を、何も分からないまま触るのは怖いです。数字が出るまで待つほうを選びます。


