SEO/analytics audit 2026-09-07: calculate params, GA4 ranking, trust box - #3
Merged
Merged
Conversation
…t box - GA4 tool events (calculate/copy_result/preset_click) now carry tool_slug, locale, category via shared toParams() in events.ts; ToolInteractionTracker/ToolFrame pass locale + category. Consent Mode gating in emit() unchanged. - scripts/calculate-ranking.mjs: GA4 Data API report of calculate events by customEvent:tool_slug (last 28 days), SA credentials from env. Requires event-scoped custom dimensions tool_slug/locale/category to be registered in GA4 Admin (documented in README). - TrustBox component for finance/health tools: about, not-advice, sources, last reviewed, methodology link; tool.trust strings added to all 17 locale message files. - Technical SEO audit: no bugs found (robots/sitemap/canonical/hreflang OK on production); ~0 GSC impressions is the deliberate INDEXED_LOCALES/INDEXED_SLUGS pruning policy. /ar/privacy has no redirect/reload loop. Claude-Session: https://claude.ai/code/session_01AcLxcZtf35XLpenzFXTpUC
appdevelopsk
added a commit
that referenced
this pull request
Sep 18, 2026
index 対象ページの関連リンクが noindex ページへ向いていた問題 (#3) と、 どこからも関連リンクを貰えない index 対象ページ (#4) をまとめて是正する。 #3 権威漏れ: getRelated に indexableOnly を追加し、index 対象ページでは index 対象だけを 関連に出す。実測で 378 本中 112 本 (29.6%) が noindex 先に向いていた。 既定は false のままとし、noindex ツールのページは従来どおり全ツールから 関連を出す (利用者向けの導線であり、クロール上の損が無いため)。 #4 孤児: fill をレジストリ登録順で埋めていたため、カテゴリ内の先頭付近ばかりが 関連に出て末尾のツールが孤児になっていた (#3 適用後も15件)。 明示 related の被リンク数 (index 対象ページからの分のみ) が少ない順に 埋めるよう変更する。同数なら slug 順で固定しビルド間で揺れないようにした。 ※被リンク数の集計で getRelated を呼ぶと相互再帰になるため明示 related のみ数える。 実測 (ビルド出力の HTML で検証): 関連リンク総数 378 → 374 noindex 先 112 → 0 関連が3件未満のページ 7 → 0 被related 0 のページ 21 → 0 (被リンク分布 min=1 / median=6 / max=14) noindex ページ160件は平均5.98件で従来どおり (関連0件は無し) 一覧の表示件数は 223 件のまま変更していない (ken 判断)。 Claude-Session: https://claude.ai/code/session_01ENHPNZ5ngcdrTHJ2H6oAFd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to the 2026-09-07 audit (GSC impressions ≈ 4 for the whole site).
Technical SEO audit — findings (no code bugs found)
robots index,followall verified live on toolify365.com.INDEXED_LOCALES(7 of 17 locales) insite/src/lib/i18n/locales.tsand theINDEXED_SLUGSallowlist (63 of 223 tools) insite/src/lib/tools/registry.tsmark everything elsenoindexand exclude it from the sitemap (seedocs/RECOVERY_PRUNE_PLAN.md). Re-evaluate the allowlist around 2026-09-15; not reverted here./ar/privacy(1 session / 19 pageviews): no client-side redirect or reload loop (server component, no meta refresh /location.replace; ConsentBanner / PageViewTracker / middleware do not navigate). Most likely a bot or manual reloads. No change.Changes
calculate,copy_result,preset_clicknow carrytool_slug,locale,category(plus legacytool) viatoParams()insite/src/lib/analytics/events.ts. Consent Mode v2 gating inemit()unchanged.site/scripts/calculate-ranking.mjs(npm run report:calculate -- --days 28 --limit 50 [--by category] [--json]). Credentials from env (GA4_PROPERTY_ID+GOOGLE_APPLICATION_CREDENTIALS/GA4_SA_JSON/GA4_SA_EMAIL+GA4_SA_KEY). Not run against live GA4 (no credentials in this session).site/src/components/tools/TrustBox.tsx) on finance/health tools: about, not-advice, sources, last reviewed, methodology link.tool.trust.*strings added to all 17 locale files.Action required after merge
tool_slug,locale,category. The ranking script returns(not set)until this is done and data accumulates from the registration date.Validation
npm run typecheck: pass.npm run audit:i18n/npm run audit:seo: both killed by the 300 s timeout on the NAS mount (esbuild "service was stopped") before producing output. Manual key-parity check of all 17 message files againsten.jsonpassed (0 missing / 0 extra);audit:seoonly inspects tool message files, which are untouched. Full build skipped (>5 min on NAS) — please rely on CI.https://claude.ai/code/session_01AcLxcZtf35XLpenzFXTpUC