よくある原因
チェックリストで防げるトラブルのうち最多は「`disabled`属性の取り忘れ」です。AIはフォームのサンプルとして`<button disabled>送信</button>`を生成することがあり、そのまま共有するとボタンが常に押せない状態になります。HTMLソースで`disabled`を検索して不要なものを削除してください。
`pointer-events: none;`がCSSで設定されているケースも見落とされやすいです。モーダルのオーバーレイや一時的に非表示にする要素に設定されたスタイルが、ボタン要素にも継承されてしまうことがあります。DevToolsのComputedタブで`pointer-events`の値を確認するのが確実です。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
自分側で確認すること
チェック①:全ボタンをDevToolsのElementsタブで検索し(`Ctrl+F`で「button」)、`disabled`属性がついていないか確認します。チェック②:CSSで`pointer-events: none`が指定されているボタンがないか、`grep -n 'pointer-events: none' style.css`で調べます。
チェック③:JavaScriptファイルへの参照パスをすべて確認し、相対パスかインラインかになっているか確かめます。`<script src="/absolute/path.js">`のような絶対パスは共有先サーバーでは解決できないことがあります。チェック④:Consoleタブにエラーがない状態で全ボタンのクリックが動作するかを最終確認します。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
相手側で確認すること
相手から「ボタンが押せない」と連絡が来た場合、最初の返信で「①使っているブラウザ(Chrome/Safari/Firefox)、②デバイス(PCかスマホか)、③F12→Consoleタブのエラーの有無」を一度に確認します。この3点があれば原因の絞り込みが1往復で完了します。
相手がスマホユーザーでDevToolsを使えない場合は、別のブラウザ(iPhoneなら標準SafariではなくChrome for iOS)でも試してもらいます。特定のブラウザだけで発生する場合はCSS互換性の問題が疑われます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止の運用
チェックリストは「①disabledなし、②pointer-eventsなし、③JSエラーなし、④全ボタンクリック確認」の4項目に絞るとチェックが習慣化しやすいです。GitHubのIssueテンプレートやNotionのチェックボックスに組み込んでおきましょう。
ギガサイト便でアップロード後は、自分のスマホとPCの両方で一度アクセスしてボタンを押す「2デバイス確認」を必須ステップにします。環境差による不具合の多くはこの確認で事前発見できます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
チェックリストをHTML生成のたびにゼロから埋めるのが面倒です
Notionやスプレッドシートでテンプレートを作り、毎回複製して使う運用にすると手間が減ります。4項目程度であれば1分以内に完了できます。
ボタンのクリックは動くのに、クリック後のページ遷移が起きない場合はチェックリストのどこを見ればいいですか?
クリックイベント自体は発火しているため、Consoleタブで`href`や`window.location`が正しいURLを指しているか確認します。外部URLへの遷移をブロックするCSPヘッダーがサーバー側で設定されている場合もあります。
チェックリストをすべて通過したのに相手の環境だけクリックできない場合は?
相手のブラウザの拡張機能(広告ブロッカー等)が原因のことがあります。シークレットモードで試してもらい、それで正常動作すれば拡張機能が犯人です。その場合はHTML側の問題ではないことを伝えてください。