# アクセス解析をみてページを改善する ## 概要・目的 このドキュメントは、GA4(Google Analytics 4)の検索流入データを元に、以下の2種類のページに「Substack有料購読への誘導リンク」を追加し、コンバージョン率(CTR)を改善するための**完全な手順書**です。 - **Obsidian Publish記事**(publish.obsidian.md/goryugo/…): **完全自動化**(1コマンドでPublishまで完結) - **Substack記事**(knowledgestuck.substack.com): **ローカルファイル編集まで自動、反映は手動**(ノートを開いてブラウザの編集画面も開く) この手順を繰り返すことで、「検索で人が来ているのにSubstackに誘導できていない記事」を段階的に改善し、有料購読者を増やしていく。 --- ## 前提条件・使用するツール ### 必須ツール - **Obsidian CLI** (`obsidian` コマンド) — Obsidianアプリがバックグラウンドで起動していること - **Antigravity MCP: google-analytics** — GA4データへのアクセス - **curl + python3** — Substack APIからpost IDを取得するため - **macOS `open` コマンド** — デフォルトブラウザでURLを開くため ### GA4プロパティID(2026年3月時点) | プロパティ名 | ID | 用途 | |:--|:--|:--| | **Obsidian Publish** | `411479937` | 記事の検索流入分析の主力。ごりゅご.comの公開記事 | | **Substack (ks)** | `523521453` | Substackの記事アクセス、goryugo.comリファラル確認 | | goryugo.com(Astro) | `312468636` | 参考程度。Publish側に流入が集中しているため副次的 | > **注意**: Publish側は `publish.obsidian.md/goryugo/...` というURLで公開されているが、GA4上の表示はパスのみ(例: `/20220204/obsidian_zettelkasten/`)として記録される。記事のパスはYAMLの `permalink` と一致する。 --- ## フェーズ1:GA4で改善対象記事を特定する ### 1-1. 検索流入上位記事のランキングを取得する GA4 MCPの `run_report` ツールを使用する。 ``` プロパティID: 411479937(Obsidian Publish) 日付範囲: 30daysAgo → today ディメンション: pagePath, pageTitle メトリクス: sessions ディメンションフィルター: sessionSourceMedium = "google / organic"(完全一致) 並び順: sessions 降順 リミット: 20 ``` **具体的なフィルター設定(JSON):** ```json { "filter": { "field_name": "sessionSourceMedium", "string_filter": { "match_type": 1, "value": "google / organic", "case_sensitive": false } } } ``` **結果例(2026年3月時点・30日間):** ``` 1位: /20220204/obsidian_zettelkasten/ 197セッション 2位: /20210309/anki-english/ 183セッション 3位: /2017/06/15/to_centrair/ 166セッション 4位: /20150818/varnish/ 159セッション 5位: /20150806/babyfence_diy/ 142セッション 6位: /20221015/obsidian_booknote/ 142セッション 7位: /20200106/hhkb-hybrid-pearing/ 129セッション ``` ### 1-2. 7日間・1日のランキングも確認する(トレンドの把握) 短期間では季節性のある記事(旅行系など)が上がってくる。30日ランキングとの差異から「今まさにホットな記事」を把握できる。 ``` 日付範囲: 7daysAgo → today(または yesterday → today) 他の条件は同じ ``` --- ## フェーズ2:現状のコンバージョン率を評価する ### 2-1. 各記事のクリック率(CTR)を計測する 対象記事から外部リンクへのクリックを計測する。特にSubstack(knowledgestuck.substack.com)へのクリックを把握する。 ``` プロパティID: 411479937 日付範囲: [前14日間] と [後14日間] の2期間比較 ディメンション: pagePath, linkUrl, dateRange メトリクス: eventCount ディメンションフィルター: AND条件 - pagePath = 対象記事のパス(完全一致) - eventName = "click"(完全一致) ``` **計算式:** ``` CTR = Substackへのクリック数 ÷ セッション数 × 100 (%) ``` ### 2-2. 優先する記事のスコアリング基準 以下の順で優先度を判断する: 1. **セッション数が多い**(検索で人が来ている) 2. **SubstackへのCTRが低い**(現在0%が最優先) 3. **記事テーマがSubstackの有料コンテンツに近い**(Obsidian / 知識管理 / 英語学習など) 4. **最近改善していない**(後述の判断方法参照) ### 2-3. Web一般論との比較 ブログ内のCTA(行動喚起リンク)の平均CTRは約2%(HubSpot等の調査)。 - **0%**: 改善なし → 最優先 - **1%未満**: 改善の余地あり - **2%以上**: 一般的に良好水準 **2026年3月の実測値:** | 記事 | セッション | CTR | 状態 | |:--|:--|:--|:--| | Anki英語学習 | 95 / 14日 | **2.1%** | 改善済み(成功モデル) | | HHKB ペアリング | 65 / 14日 | **0%** | 未改善 | | Zettelkasten管理 | 96 / 14日 | **0%** | 未改善 | --- ## フェーズ3:挿入するリンク先を選定する ### 3-1. 選定の基準(重要) **「セッション数が多い記事」ではなく、以下の2軸で選ぶ:** 1. **記事テーマとの近さ** — 読んでいる記事の内容を「もう一段深く」できるSubstack記事 2. **エンゲージメント時間(滞在時間)が長い** — 実際に読まれているSubstack記事 ### 3-2. Substackのエンゲージメント時間を取得する方法 ``` プロパティID: 523521453(Substack) 日付範囲: 30daysAgo → today ディメンション: pagePathPlusQueryString メトリクス: sessions, userEngagementDuration(秒) ディメンションフィルター: sessionSource = "goryugo.com"(含む) 並び順: userEngagementDuration 降順 ``` これにより「goryugo.comから来た読者がどのSubstack記事を最も長く読んでいるか」が分かる。 **2026年3月の結果(goryugo.comリファラル、30日間・滞在時間順):** ``` /p/15obsidian: 平均97秒、18セッション /p/obsidian002: 平均130秒、16セッション /p/spaced-repetitionanki: 平均303秒(5分超)、10セッション ← 読書メモと完全一致 /p/obsidian001: 平均198秒、21セッション /p/6cb: 平均234秒、2セッション ``` ### 3-3. 記事別の最適リンク先一覧(2026年3月実施分) | Publish記事 | 誘導先Substack記事 | 選定理由 | |:--|:--|:--| | Zettelkasten管理 | [RINKシステムとその運用例](https://knowledgestuck.substack.com/p/obv9) | Zettelkastenの進化版そのもの。内容直結 | | HHKB ペアリング | [Spaced Repetitionでノートを育てる](https://knowledgestuck.substack.com/p/ks030) | 「良い道具で書く→ノートを育てる」の論理展開 | | Obsidian 読書メモ | [Spaced Repetitionで見直し仕組みを実現](https://knowledgestuck.substack.com/p/spaced-repetitionanki) | 読書メモの「振り返り」に完全直結、滞在時間5分超 | ### 3-4. リンク先Substack記事のURLをローカルファイルから確認する方法 ```bash obsidian property:read path="Astro/ks/記事フォルダ/記事名.md" name="url" obsidian property:read path="Astro/ks/記事フォルダ/記事名.md" name="title" ``` または関連記事を検索してから確認: ```bash obsidian search query="キーワード" path="Astro/ks" format=json limit=5 ``` --- ## フェーズ4:Obsidian Publish記事の改善(完全自動) Obsidian Publish記事の改善は**ローカルファイル編集→Publish→ブラウザ確認まで完全自動**で行える。 ### 4-1. 対象ローカルファイルの特定 **方法A: URLパスがわかっている場合(obsidian searchを使う)** ```bash obsidian search query="[URLパスのキーワード]" format=json ``` 例:`/20220204/obsidian_zettelkasten/` の場合 ```bash obsidian search query="obsidian_zettelkasten" format=json ``` 出力例: ```json ["Astro/Publish/ri.RINKシステム⛓️/ObsidianでZettelkasten(ツェッテルカステン)を使うときのノートの管理方法.md"] ``` **方法B: YAMLの `permalink` プロパティから逆引きする** Obsidian CLIの `property:read` を使ってYAMLのurlやpermalinkを確認できるが、全ファイルを一括検索するには `grep` が高速: ```bash grep -rl "permalink: /20220204/obsidian_zettelkasten/" \ "/Users/goryugo/Library/Mobile Documents/iCloud~md~obsidian/Documents/Obsidian_local/Astro" \ --include="*.md" ``` ### 4-2. YAMLと本文の構造確認 ```bash obsidian read path="[相対パス]" ``` または ```bash # 先頭20行だけ確認(YAMLフロントマターの確認のため) # ファイルを直接view_fileツールで確認する ``` **Publish記事の典型的なYAML構造:** ```yaml --- title: 記事タイトル id: '34562' categories: - - カテゴリ名 permalink: /20220204/obsidian_zettelkasten/ date: 2022-02-04T06:00:00 --- ``` `permalink` の値がObsidian PublishのURLパスに対応する。 ### 4-3. calloutブロックの作成と挿入 **挿入位置**: YAMLフロントマター(`---`で囲まれた部分)の直後、最初の本文の**前** **calloutのフォーマット:** ```markdown > [!note] **📅 2026年追記:[この記事を深める文脈]たい方へ** > [この記事の内容]を、**[Substackで提供しているもの]**をKnowledge Stackで公開しています。 > > → [リンクテキスト(Knowledge Stack)](https://knowledgestuck.substack.com/p/SLUG) > > *無料購読でお試しいただけます。* ``` **calloutの種類の使い分け:** - `[!note]` — 知識・情報系の記事(Zettelkasten、読書メモなど) - `[!tip]` — ツール・ガジェット系の記事(HHKB など) - `[!important]` — 緊急性や重要性が高い場合 **文言の作り方のポイント(重要!):** 1. **リンク先がセミナー案内等ではないことを確認する**(間違えると完全に逆効果) 2. タイトルと内容が一致しているか確認 3. 「AI×Obsidian」など汎用的すぎる説明ではなく、**記事テーマに具体的に合わせた文言**を使う 4. 「最新の実験・手法は毎週更新中」は入れてもよいが、実際に更新頻度が高い場合のみ **実施例(Zettelkasten記事):** ```markdown > [!note] **📅 2026年追記:Zettelkastenをさらに進化させたい方へ** > この記事のZettelkastenの考え方を発展させ、**Obsidianのリンク構造を活かした独自の知識管理システム「RINKシステム」**の実践と運用例をKnowledge Stackで公開しています。 > > → [現状のRINKシステムとその運用例(Knowledge Stack)](https://knowledgestuck.substack.com/p/obv9) > > *無料購読でお試しいただけます。* ``` **実施例(読書メモ記事):** ```markdown > [!note] **📅 追記:読書メモを「忘れない仕組み」で活かしたい方へ** > この記事で紹介した読書メモを、**Spaced Repetitionプラグインを使って定期的に見直す仕組み**をKnowledge Stackで詳しく解説しています。読書メモの「死蔵」を防ぐ実践的な方法です。 > > → [Spaced Repetitionプラグインで「Ankiっぽい」ノート見直しの仕組みを実現(Knowledge Stack)](https://knowledgestuck.substack.com/p/spaced-repetitionanki) > > *無料購読でお試しいただけます。* ``` ### 4-4. ファイルへの追記(コマンドで実施) **`replace_file_content` ツールを使用して挿入:** YAMLの `---` 直後の最初の本文行を `TargetContent` として指定し、callout + 本文を `ReplacementContent` に入れる。 ``` TargetContent: "最初の本文行(例:jMatsuzakiさんが...)" ReplacementContent: > [!note] **📅 2026年追記:...** > ... > > → [リンクテキスト](URL) > > *無料購読でお試しいただけます。* 最初の本文行(元のテキスト) ``` ### 4-5. Obsidianでノートを開く ```bash obsidian open path="[相対パス]" ``` 例: ```bash obsidian open path="Astro/Publish/ri.RINKシステム⛓️/ObsidianでZettelkasten(ツェッテルカステン)を使うときのノートの管理方法.md" ``` ### 4-6. Obsidian Publishに公開する(自動化の核心) ```bash obsidian publish:add path="[相対パス]" ``` 例: ```bash obsidian publish:add path="Astro/Publish/ri.RINKシステム⛓️/ObsidianでZettelkasten(ツェッテルカステン)を使うときのノートの管理方法.md" ``` **複数ファイルを一括でPublishする場合:** ```bash obsidian publish:add path="ファイル1.md" && obsidian publish:add path="ファイル2.md" && obsidian publish:add path="ファイル3.md" ``` 成功すると `Published: ファイルパス` と表示される。 ### 4-7. 公開後の確認(オプション) ブラウザでURLを開いてcalloutが正しく表示されているか確認する。 `obsidian publish:open path="[ファイルパス]"` でPublishの公開ページを開くこともできる。 --- ## フェーズ5:Substack記事の改善(ローカルまで自動、反映は手動) Substackは `obsidian publish:add` のような自動公開コマンドがないため、以下の分担になる: - **Antigravity担当**: ローカルファイルを編集 → Obsidianで開く → ブラウザでSubstack編集画面を開く - **ユーザー担当**: Substack編集画面で内容を手動反映(貼り付けまたは直接編集) ### 5-1. ローカルファイルの特定方法 **方法A: SubstackのURLのslugからgrepで検索** Substack記事のURL(例: `https://knowledgestuck.substack.com/p/obsidian-bases-b15`)のslug部分を使ってgrep: ```bash # Astro/ks 以下を対象にURL文字列で検索 grep -rl "/p/obsidian-bases-b15" \ "/Users/goryugo/Library/Mobile Documents/iCloud~md~obsidian/Documents/Obsidian_local/Astro" \ --include="*.md" -l | head -5 ``` **方法B: obsidian searchで記事タイトルキーワードを検索** ```bash obsidian search query="Obsidian Bases タスク管理" path="Astro/ks" format=json limit=5 ``` **方法C: YAMLのurlプロパティを確認** 見つかったファイルのURLプロパティが正しいか確認: ```bash obsidian property:read path="Astro/ks/250910_Obsidian_Basesを使ったタスク管理の実例.md" name="url" ``` 出力例:`https://knowledgestuck.substack.com/p/obsidian-bases-b15` ### 5-2. ローカルファイルの内容確認 ```bash obsidian read path="[相対パス]" ``` または長いファイルは `view_file` ツールで直接確認する。 **Substack記事のローカルファイルの典型的な構造(`Astro/ks/` 以下):** ```yaml --- title: 記事タイトル description: "記事の要約" author: goryugo url: https://knowledgestuck.substack.com/p/SLUG date_published: 2025-09-10 --- 本文... ## 無料でここまで再現できる ...(無料で試せる内容) ## 続きを使う ...(有料会員向けCTA) → [有料会員登録](https://knowledgestuck.substack.com/subscribe) ``` ### 5-3. 改善内容の設計 Substack記事への改善は主に以下の2箇所: **① 有料特典の案内の直前(関連記事の内部リンク追加)** 読者が「無料部分を読み終えた」タイミングで、深い学びに誘導する。 ```markdown **このシステムをさらに発展させた実践例も公開しています。** - [関連記事タイトル1](URL) — ひとことの補足 - [関連記事タイトル2](URL) — ひとことの補足 ``` **② 末尾のCTA見出しと文言の改善** | 修正前(受動的) | 修正後(能動的) | |:--|:--| | `## 続きを使う` | `## この設定ファイルを今すぐ試す` | | `続きをご利用ください。→ [有料会員登録]` | `ダウンロードして読み込むだけで同じ環境が再現できます。→ [有料会員登録でファイルを受け取る]` | ### 5-4. ローカルファイルを編集する `multi_replace_file_content` または `replace_file_content` ツールを使用する。 **注意:** Substack記事はObsidianのcallout記法(`>[!note]`)が使えない。通常のMarkdown記法(太字、リンク等)を使う。 ### 5-5. Obsidianノートとデフォルトブラウザを同時に開く(必須) AIがローカルファイルの編集を終えたら、ユーザーが「ローカルファイルからコピーして、Substackの編集画面にペーストする」という作業をスムーズに行えるよう、**必ず「Obsidianのノート」と「Substackのブラウザ画面」の両方をセットで開くこと。** ```bash # Obsidianで該当ノートを開く obsidian open path="Astro/ks/250910_Obsidian_Basesを使ったタスク管理の実例.md" # デフォルトブラウザでSubstackの公開ページを開く open "https://knowledgestuck.substack.com/p/<SLUG>" ``` ※公開URLを開いて、画面上部の「Edit」メニューからユーザーが手動で編集画面に入る形式が現在最も確実です。(ID検索からの遷移コマンドは廃止されました) --- ## 成功モデル:Anki記事の追記パターン Anki記事(`/20210309/anki-english/`)は1〜2週前に改善を実施済みで、以下の形式が成功しています。 **実際に追記された内容(末尾):** ```html Ankiなどを使った勉強の仕方、Obsidianなどの知識を整理するツールに関する無料のニュースレター(メルマガ)を始めました。 気になる方は是非登録してみてください(気に入らなかったら1クリックで解除できます) <iframe src="https://knowledgestuck.substack.com/embed" ...></iframe> ``` **成果(2週間前後の比較):** - セッション数: ほぼ同等(95 vs 93) - クリック数: **3回 → 12回(4倍)** - CTR: **3.2% → 12.6%** --- ## 注意事項・やってはいけないこと ### ❌ リンク先記事の内容を確認しないで設定する 最初の実施時に犯した失敗:`antigravity2` というSlugのSubstack記事が「セミナー案内」の内容だったにもかかわらず、「AIとObsidianを組み合わせた〜」という文言でリンクしてしまった。記事の内容とcalloutの文言が完全に乖離しており、読者の信頼を損なう。 **対策:** リンク先を設定する前に必ず以下を確認する: 1. `obsidian property:read path="..." name="title"` でタイトルを確認 2. 必要に応じて `obsidian read path="..."` で本文を確認 3. SubstackのURL(`https://knowledgestuck.substack.com/p/SLUG`)をブラウザで開いて実際の内容を見る ### ❌ アクセス数だけで誘導先記事を選ぶ アクセス数が多くても、**読まれていない(滞在時間が短い)**記事に誘導しても効果が薄い。必ず「内容の近さ × 滞在時間の長さ」の両面で判断する。 ### ❌ Substackの改善を `obsidian publish:add` しようとする SubstackはObsidian Publishとは別システム。 `publish:add` はObsidian Publish専用。Substackは手動反映が必要。 ### ⚠️ browser_subagentでSubstack編集画面を開かない ログイン状態が引き継がれず、編集が困難になる。必ず `open "URL"` コマンドでデフォルトブラウザに開く。 --- ## 今後の課題 ### 「最近改善済みの記事をスキップする」判断方法(未解決) 現在は手動で判断しているが、以下の方法が考えられる: **案1: YAMLにメタデータを追加する** 改善実施時に `last_cta_updated: 2026-03-02` などのプロパティを追記し、Obsidian CLIで読み取る: ```bash obsidian property:read path="..." name="last_cta_updated" ``` **案2: calloutの有無をgrepで確認する** ```bash grep -l "Knowledge Stack" "対象ファイルパス" ``` callout中の固定文言("Knowledge Stack" や "無料購読でお試し" など)が含まれていれば改善済みとみなす。 **案3: GA4でCTRを計算して閾値以下の記事だけ対象にする** CTR 2%以上の記事はスキップ、未満の記事のみ改善対象とする(毎回GA4で計測して判断)。 --- ## 実行チェックリスト ### Obsidian Publish記事の改善(1記事あたり) - [ ] GA4で対象記事のパスを特定(30日・7日セッション数を確認) - [ ] `obsidian search` でローカルファイルを特定 - [ ] `obsidian read` で本文構造を確認(callout挿入位置を確認) - [ ] 誘導先Substack記事を選定(内容一致 × 滞在時間でGA4確認) - [ ] 誘導先記事のタイトルとURLを `obsidian property:read` で確認 - [ ] callout文言を作成(文言とリンク先の内容が一致していることを確認!) - [ ] `replace_file_content` でcalloutを挿入 - [ ] `obsidian open path="..."` でノートを開く - [ ] `obsidian publish:add path="..."` でPublish - [ ] ブラウザで公開ページを開いてcalloutの表示を確認 ### Substack記事の改善(1記事あたり) - [ ] GA4で対象記事の `/p/SLUG` を特定(セッション数 × 滞在時間を確認) - [ ] `grep -rl "/p/SLUG" Astro/ --include="*.md"` でローカルファイルを特定 - [ ] `obsidian property:read ... name="url"` でURLを確認 - [ ] `obsidian read` で本文構造を確認(改善箇所を特定) - [ ] 関連Substack記事リンクと改善CTAを設計 - [ ] `multi_replace_file_content` で編集 - [ ] `obsidian open path="..."` でノートを開く - [ ] `curl ... | python3 ...` でpost IDを取得 - [ ] `open "https://knowledgestuck.substack.com/publish/post/{ID}"` でデフォルトブラウザに編集画面を開く - [ ] (ユーザー) Substack編集画面で手動反映 --- ## コマンドリファレンス一覧 ```bash # ファイル検索 obsidian search query="キーワード" format=json obsidian search query="キーワード" path="Astro/ks" format=json limit=5 grep -rl "/p/SLUG" "/Users/goryugo/Library/Mobile Documents/iCloud~md~obsidian/Documents/Obsidian_local/Astro" --include="*.md" -l # YAMLプロパティ取得 obsidian property:read path="相対パス" name="url" obsidian property:read path="相対パス" name="title" # 本文読み取り obsidian read path="相対パス" # Obsidianで開く obsidian open path="相対パス" # Obsidian Publishに公開 obsidian publish:add path="相対パス" # Substack Post ID取得 curl -s "https://knowledgestuck.substack.com/api/v1/posts/SLUG" \ | python3 -c "import sys, json; d=json.load(sys.stdin); print(d.get('id'))" # Substack編集画面をデフォルトブラウザで開く open "https://knowledgestuck.substack.com/publish/post/{ID}" ```