よくある原因
AIはHTMLのPDF埋め込みを生成するとき、多くの場合`<embed src="document.pdf">`や`<iframe src="report.pdf">`のように相対パスのままコードを書きます。これはAIが「ローカル開発環境でのファイル配置」を前提にしているためで、Webサービスに単体のHTMLをアップロードする状況を想定していません。プロンプトで用途(ホスティングサービスへの単体アップロード)を明示することが対策の第一歩です。
また、`<embed>`タグは一部のブラウザやモバイル環境でPDFを表示せず、代わりにダウンロードを促すことがあります。AIがこのクロスブラウザ問題を考慮せずに`<embed>`を生成するのは、学習データに単純なコードスニペットが多く含まれているためです。プロンプトに「iOSのSafariでも表示できること」や「Chrome・Firefox・Edge・SafariのPC版で表示確認すること」と追記すると、AIがよりロバストな実装を選択する可能性が上がります。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
自分側で確認すること
AIが生成したHTMLのPDF関連コードを確認します。`<embed>`、`<iframe>`、`<object>`タグのsrc属性値が相対パスになっている場合、その相対パスで参照できるPDFファイルが実際に存在するか確認します。ない場合は外部URLを指定するようにAIに再プロンプトするか、自分でsrc属性の値を差し替えます。
生成されたHTMLをローカルのChromeとFirefoxの両方で開き、PDFが表示されるか確認します。Chromeで表示されてもFirefoxで「プラグインがサポートされていません」と表示される場合は、`<embed type="application/pdf">`のtype属性か、iframeへの切り替えで改善することがあります。さらにスマホ(iOS Chrome/Safari)でも確認すると、モバイル非互換を本番前に発見できます。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
相手側で確認すること
PDF埋め込みがAIの生成物であることを共有相手に事前に伝え、「表示されない場合は教えてください」と一言添えておきます。相手から「見えない」と報告を受けた場合、「ブラウザとOS、エラーメッセージのスクリーンショット」を求めます。こうすることでAIの生成コードに起因する問題か、相手環境の設定問題かを判断できます。
相手がiOSユーザーで`<embed>`が機能しない場合、Google Drive経由のiframe埋め込みに切り替えるか、PDFへのダイレクトリンクを提供します。この切り替えをAIへの再プロンプトで対応する場合は「iOSのSafariでPDFが表示できるよう、Google DriveのプレビューURLを使ったiframe形式にすること。URLは[YOUR_DRIVE_URL]というプレースホルダーで記載すること」と依頼します。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止の運用
PDF埋め込みHTMLをAIに生成させる際の定型プロンプトの例:「PDFの埋め込みにはiframeを使うこと。PDFのURLは`YOUR_PDF_URL`というプレースホルダーで記載すること。iPhone/iPad(iOS Safari)では`<embed>`でのPDFインライン表示が不安定なため、PDFをダウンロードするボタンも別途設置すること。PDFが表示されない場合のエラーメッセージを日本語でHTMLに含めること。」
このプロンプトに加え、アップロード前にChrome DevToolsのNetworkタブでPDFリクエストの成否を確認するステップをフローに組み込みます。404が出なければアップロード後も同じURLのPDFにアクセスできます。PDFをギガサイト便のzip内に同梱する場合は、zipの中のファイル構成が意図通りか(HTMLとPDFが同一ディレクトリか)を確認してからアップロードします。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
AIに「PDF埋め込みをクロスブラウザ対応にして」と指示しましたが相変わらず`<embed>`が生成されます。
`<embed>`自体はクロスブラウザ対応ですが、PDFのMIMEタイプやブラウザ設定により動作差があります。「iframeを使い、PDFが表示されない場合はダウンロードリンクを代替表示するフォールバックを実装すること」のように具体的な実装方針を指示すると変わります。
PDF.jsを使ったプロンプトを書く場合の注意点はありますか?
PDF.jsのCDN(`https://mozilla.github.io/pdf.js/`)は本番環境では推奨されていません。npmパッケージとしてバンドルするか、GitHubリリースから`pdf.min.js`と`pdf.worker.min.js`をHTMLに同梱する方法を指定します。AIに「PDF.jsをCDNではなくローカルファイルとして組み込むこと」と明示します。
Google DriveのプレビューURLをiframeに使う場合、相手がGoogleにログインしていない場合でも見えますか?
PDFの共有設定が「リンクを知っている全員」になっていれば、Googleアカウントなしで閲覧できます。ただしGoogleの仕様変更で非ログイン表示が制限される可能性はゼロではないため、重要な共有には自前ホスティングのPDFURLを使うほうが安全です。