<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web on plzhans blog</title><link>https://blog.plzhans.com/ja/categories/web/</link><description>Recent content in Web on plzhans blog</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Thu, 03 Sep 2026 12:52:00 +0000</lastBuildDate><atom:link href="https://blog.plzhans.com/ja/categories/web/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugoブログを作る - 始め方からSEOまで</title><link>https://blog.plzhans.com/ja/posts/123-hugo-blog-guide/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://blog.plzhans.com/ja/posts/123-hugo-blog-guide/</guid><description>&lt;h2 id="概要"&gt;概要&lt;/h2&gt;&#10;&lt;p&gt;このブログ自体がこの順番で構築されました。Notionで記事を書きMarkdownに変換してHugoでビルドし、GitHub Pagesにデプロイするパイプラインから、カスタムドメインの接続、多言語対応、セキュリティヘッダーまで順番に整理しました。&lt;/p&gt;&#10;&lt;h2 id="なぜこの組み合わせなのか"&gt;なぜこの組み合わせなのか&lt;/h2&gt;&#10;&lt;p&gt;静的サイトはサーバーを別途運用する必要がなく、GitHub Pagesのような無料ホスティングに載せるだけでそれ自体が高速で安定します。問題は「静的」という言葉どおり執筆の体験が不便になりがちな点ですが、NotionをCMSとして使うとこの問題が解決します — 普段使っているエディタで記事を書き、APIでNotionページをそのままMarkdownとして取り込んでビルドすればよいのです。Hugoは静的サイトジェネレーターの中でもビルド速度が速く、テーマのエコシステムが整っているため選びました。&lt;/p&gt;&#10;&lt;h2 id="全体アーキテクチャ"&gt;全体アーキテクチャ&lt;/h2&gt;&#10;&lt;p&gt;Notion(記事作成) → 同期スクリプト(Notion APIでMarkdownに変換) → Hugo(静的サイトビルド) → GitHub Actions(コミット時に自動ビルド・デプロイ) → GitHub Pages(ホスティング) → Cloudflare(CDN・セキュリティヘッダー)の順でつながっています。記事を書いて「発行要求」状態に変えるだけで、あとは自動化されたパイプラインが処理してくれます。&lt;/p&gt;&#10;&lt;h2 id="構築の順番"&gt;構築の順番&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;まず基本のブログを作る → &lt;a href="../94-hugo-github-blog/"&gt;Hugo + GitHubでブログを作る&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;自分のドメインを接続する → &lt;a href="../86-github-pages-custom-domain/"&gt;GitHub Pagesでカスタムドメインを使う方法&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;複数言語に拡張する → &lt;a href="../93-hugo-multilingual-seo-setup/"&gt;Hugoサイトで多言語対応する&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;セキュリティヘッダーで仕上げる → &lt;a href="../120-cloudflare-security-headers-hsts-csp/"&gt;SEO監査が指摘するセキュリティヘッダー4つを、Cloudflareでコードなしに適用する&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="hugo--githubでブログを作る--基本パイプライン"&gt;Hugo + GitHubでブログを作る — 基本パイプライン&lt;/h2&gt;&#10;&lt;p&gt;Notion→Markdown→Hugoビルド→GitHub Pagesデプロイの流れ全体を整理しました。Hugoのインストール、m10cテーマの適用、GitHub Actionsによる自動デプロイ、baseURL設定でよくあるミスまで扱います。この段階だけ終えても、執筆からデプロイまで完全に自動化されたパイプラインが手に入ります。&lt;/p&gt;&#10;&lt;p&gt;→ &lt;a href="../94-hugo-github-blog/"&gt;Hugo + GitHubでブログを作る&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="github-pagesカスタムドメイン--自分のドメインを接続する"&gt;GitHub Pagesカスタムドメイン — 自分のドメインを接続する&lt;/h2&gt;&#10;&lt;p&gt;CNAME・A/AAAAレコードの設定、GitHub PagesのCustom domain適用手順、Actionsデプロイとブランチデプロイでのcnameファイル処理の違い、CAAレコードのせいでEnforce HTTPSが有効にならない原因まで整理しました。github.ioサブドメインの代わりに自分のドメインを使うと、ブランディングだけでなく検索エンジンにもより一貫したシグナルを送れます。&lt;/p&gt;&#10;&lt;p&gt;→ &lt;a href="../86-github-pages-custom-domain/"&gt;GitHub Pagesでカスタムドメインを使う方法&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="hugo多言語対応--seoまでカバーする"&gt;Hugo多言語対応 — SEOまでカバーする&lt;/h2&gt;&#10;&lt;p&gt;多言語ブログでbaseURL、sitemap、robots、JSON-LD、Open Graph、meta descriptionを設定し、hreflang・canonicalで重複コンテンツの問題を防ぐ方法を整理しました。言語別のsitemapを別々に管理しないとインデックスの問題につながりやすい部分なので、最初から構造を整えておくことが重要です。&lt;/p&gt;&#10;&lt;p&gt;→ &lt;a href="../93-hugo-multilingual-seo-setup/"&gt;Hugoサイトで多言語対応する&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="セキュリティヘッダー--seo監査が指摘する理由"&gt;セキュリティヘッダー — SEO監査が指摘する理由&lt;/h2&gt;&#10;&lt;p&gt;HSTS・CSP・X-Content-Type-Options・Referrer-PolicyをSEO監査がなぜ指摘するのか、値が固定されたヘッダーはCloudflare Transform Rulesで、頻繁に変わるCSPはHTML metaタグで管理する方法を整理しました。静的サイトなのでサーバーの設定ファイルがない分、こうしたヘッダーはCDNやmetaタグのレベルで別途対応する必要があります。&lt;/p&gt;</description></item><item><title>SEO監査が指摘するセキュリティヘッダー4つを、Cloudflareでコードなしに適用する</title><link>https://blog.plzhans.com/ja/posts/120-cloudflare-security-headers-hsts-csp/</link><pubDate>Sun, 30 Aug 2026 01:25:00 +0000</pubDate><guid>https://blog.plzhans.com/ja/posts/120-cloudflare-security-headers-hsts-csp/</guid><description>&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/120-cloudflare-security-headers-hsts-csp/assets/1_bb515481-7252-4c3f-94cb-0474c42c9d1c_hu_b1596e5cf95128e.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/120-cloudflare-security-headers-hsts-csp/assets/1_bb515481-7252-4c3f-94cb-0474c42c9d1c_hu_78a6ae4905cadc2c.png" alt="CloudflareとHTMLのmetaタグでセキュリティヘッダーを分けて適用する構成を示した代表画像" width="1200" height="630" loading="lazy"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://blog.plzhans.com/posts/120-cloudflare-security-headers-hsts-csp/assets/2_3cb22a0f-7e83-805e-96d1-eef71485d603.png" alt="CloudflareとHTMLのmetaタグでセキュリティヘッダーを分けて適用する構成を示した代表画像" loading="lazy"&gt;&lt;/p&gt;&#10;&lt;h2 id="概要"&gt;概要&lt;/h2&gt;&#10;&lt;p&gt;SEO監査レポートで、4つのセキュリティヘッダーが指摘されることがあります。&lt;code&gt;Strict-Transport-Security&lt;/code&gt;、&lt;code&gt;Content-Security-Policy&lt;/code&gt;、&lt;code&gt;X-Content-Type-Options&lt;/code&gt;、&lt;code&gt;Referrer-Policy&lt;/code&gt;です。&lt;/p&gt;&#10;&lt;p&gt;最初はなぜこれがSEO項目なのかと思うはずです。結論から言うと、&lt;strong&gt;これらのヘッダーは検索順位を直接上げてくれるわけではありません。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;この記事では、なぜSEO監査にセキュリティヘッダーが含まれるのか、各ヘッダーが何をするのか、そしてCloudflareを前段に置いた静的ブログで&lt;strong&gt;後から管理しやすい組み合わせ&lt;/strong&gt;で適用する方法を整理します。&lt;/p&gt;&#10;&lt;h2 id="なぜseoレポートがセキュリティヘッダーを指摘するのか"&gt;なぜSEOレポートがセキュリティヘッダーを指摘するのか&lt;/h2&gt;&#10;&lt;h3 id="lighthouseスコアに含まれている"&gt;Lighthouseスコアに含まれている&lt;/h3&gt;&#10;&lt;p&gt;ほとんどのSEO監査ツールはGoogle Lighthouseをベースに技術SEOスコアを算出します。Lighthouseの4つのカテゴリのうち1つが&lt;strong&gt;Best Practices&lt;/strong&gt;で、ここにCSP、HSTS、&lt;code&gt;X-Content-Type-Options&lt;/code&gt;のチェックが含まれています。&lt;/p&gt;&#10;&lt;p&gt;厳密にはセキュリティ衛生の点検なのですが、SEO監査フレームワークに組み込まれて一緒に報告されているのです。検索エンジンがこのヘッダーを読んで順位付けしているわけではありません。&lt;/p&gt;&#10;&lt;h3 id="本当のつながりはハッキングされた時の結果"&gt;本当のつながりはハッキングされた時の結果&lt;/h3&gt;&#10;&lt;p&gt;実質的なつながりは次の経路です。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;XSSやコンテンツインジェクションでスパムリンクや悪意のあるスクリプトが挿入される。&lt;/li&gt;&#10;&lt;li&gt;Google Safe Browsingが検索結果に警告を付けるか、インデックスから除外する。&lt;/li&gt;&#10;&lt;li&gt;トラフィックが一夜にして消える。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;セキュリティヘッダーは1番が起こる確率を下げる予防措置です。監査レポートがこの項目を高優先度に分類するのは、&lt;strong&gt;発生確率が高いからではなく、起きた時のインパクトが大きいから&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;💡 まとめると「セキュリティヘッダー → 順位上昇」ではなく、「セキュリティヘッダー不在 → ハッキングリスク → (発生した場合)順位崩壊」という間接的で非対称な関係です。&#10;ユーザーアップロードもログインフォームもない静的ブログなら攻撃対象領域そのものが小さいため、優先度としては致命的というよりは、やっておくと安全な予防接種に近いものです。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="各ヘッダーの役割"&gt;各ヘッダーの役割&lt;/h2&gt;&#10;&lt;h3 id="strict-transport-security-hsts"&gt;Strict-Transport-Security (HSTS)&lt;/h3&gt;&#10;&lt;p&gt;ブラウザに対して、このドメインには今後必ずHTTPSでのみ接続するよう指示します。&lt;code&gt;http://&lt;/code&gt;でリクエストが発生してもサーバーに確認せず、ブラウザが即座に&lt;code&gt;https://&lt;/code&gt;に変換します。&lt;/p&gt;&#10;&lt;p&gt;すでに301でHTTPSリダイレクトをしていても、&lt;strong&gt;その最初のリクエストの瞬間は平文&lt;/strong&gt;です。公共Wi-Fiのような環境で攻撃者が中間で傍受し、偽のページを表示するSSLストリッピングが可能な区間がまさにここです。HSTSはその区間をなくします。&lt;/p&gt;&#10;&lt;h3 id="content-security-policy-csp"&gt;Content-Security-Policy (CSP)&lt;/h3&gt;&#10;&lt;p&gt;スクリプト、画像、スタイルをどの取得元から読み込めるかを定めるホワイトリストです。中核となる役割はXSS防御です。&lt;/p&gt;&#10;&lt;p&gt;外部依存(コメントウィジェット、アナリティクスなど)のいずれかがサプライチェーン攻撃を受けたり、コンテンツパイプラインのバグでエスケープされていないテキストがそのままHTMLに入り込む事故が起きても、許可されていない取得元からのスクリプト実行をブラウザが拒否します。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;一次防御線が突破されても機能する二次防御線&lt;/strong&gt;だと考えてください。&lt;/p&gt;&#10;&lt;h3 id="x-content-type-options-nosniff"&gt;X-Content-Type-Options: nosniff&lt;/h3&gt;&#10;&lt;p&gt;ブラウザがサーバーの示した&lt;code&gt;Content-Type&lt;/code&gt;を無視して、ファイルの内容を見て種類を自ら推測するMIMEスニッフィングを防ぎます。&lt;/p&gt;&#10;&lt;p&gt;この推測が悪用されると、実行されてはいけないファイルがスクリプトとして実行される迂回経路が生まれます。ユーザーアップロードのないブログならリスクは低いですが、副作用がないためそのまま有効にしておく項目です。&lt;/p&gt;&#10;&lt;h3 id="referrer-policy"&gt;Referrer-Policy&lt;/h3&gt;&#10;&lt;p&gt;訪問者が他のサイトへ移動したり外部リソースを読み込んだりする際、どのページから来たのかをどこまで渡すかを定めます。&lt;/p&gt;&#10;&lt;p&gt;最近のブラウザは何も指定しなくてもデフォルト値がすでに&lt;code&gt;strict-origin-when-cross-origin&lt;/code&gt;になっています。以前のデフォルトだった&lt;code&gt;no-referrer-when-downgrade&lt;/code&gt;は、プロトコルさえ同じであればパスまで含めた完全なURLを渡していましたが、2020年の仕様改定で基準が変わりました。&lt;/p&gt;&#10;&lt;p&gt;そのため、この項目は「今まさに情報が漏れている」というよりは、&lt;strong&gt;ブラウザのデフォルト値に依存せず、サイトが望むポリシーを明示しておく&lt;/strong&gt;という意味合いが大きいです。SEOよりも訪問者のプライバシーの性格が強い項目です。&lt;/p&gt;&#10;&lt;h2 id="どこに何を置くか"&gt;どこに何を置くか&lt;/h2&gt;&#10;&lt;p&gt;ヘッダーを全部Cloudflareに集約することもできますし、全部HTMLに入れることもできます。実際に運用してみると、&lt;strong&gt;値が変わる頻度&lt;/strong&gt;が基準になります。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ヘッダー&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;置き場所&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;理由&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Strict-Transport-Security&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cloudflare&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一度有効にすれば変わることがない&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;X-Content-Type-Options&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cloudflare&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;値が&lt;code&gt;nosniff&lt;/code&gt;固定である&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Referrer-Policy&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cloudflare&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;metaでもできるがヘッダーの方が確実&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;X-Frame-Options&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cloudflare&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;値が固定で、metaでは代替できない&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Content-Security-Policy&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTML meta&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;外部サービスを追加するたびに値が変わる&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;CSPだけ性格が異なります。アナリティクスを乗り換えたりコメントウィジェットを追加するたびに許可元を修正する必要があり、これをCloudflareに置くと**サイトをいじるたびにダッシュボードに入らなければなりません。**サイトのリポジトリで一緒に管理する方がはるかに楽です。&lt;/p&gt;&#10;&lt;h2 id="cloudflareに置くヘッダー"&gt;Cloudflareに置くヘッダー&lt;/h2&gt;&#10;&lt;h3 id="1-hstsとnosniffは1画面で完結する"&gt;1. HSTSとnosniffは1画面で完結する&lt;/h3&gt;&#10;&lt;p&gt;SSL/TLS → Edge Certificates → &lt;strong&gt;HTTP Strict Transport Security (HSTS)&lt;/strong&gt; → Enable HSTS&lt;/p&gt;</description></item><item><title>Hugoサイトで多言語対応する</title><link>https://blog.plzhans.com/ja/posts/93-hugo-multilingual-seo-setup/</link><pubDate>Wed, 11 Feb 2026 09:55:00 +0000</pubDate><guid>https://blog.plzhans.com/ja/posts/93-hugo-multilingual-seo-setup/</guid><description>&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/93-hugo-multilingual-seo-setup/assets/1_30a22a0f-7e83-80a2-b545-f71914bc48d5_hu_96c9b024a1b970b3.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/93-hugo-multilingual-seo-setup/assets/1_30a22a0f-7e83-80a2-b545-f71914bc48d5_hu_990513992b9543a8.png" alt="Hugoブログに多言語対応とhreflang・canonicalなどのSEO設定を適用する構成を示す代表画像" width="1200" height="670" loading="eager" fetchpriority="high"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h2 id="目的"&gt;目的&lt;/h2&gt;&#10;&lt;p&gt;Hugoブログに多言語対応とSEO最適化を適用し、検索エンジンへの露出を最大化するとともに、多言語ユーザーに適切な言語バージョンを提供します。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="seo設定"&gt;SEO設定&lt;/h2&gt;&#10;&lt;p&gt;SEO(Search Engine Optimization、検索エンジン最適化)とは、Googleなどの検索エンジンがサイトのコンテンツを正しく理解し、検索結果に表示できるように、サイト構造とメタデータを最適化する作業です。&lt;/p&gt;&#10;&lt;p&gt;この文書では、ブログに適用されたSEO設定をまとめます。&lt;/p&gt;&#10;&lt;h3 id="1-絶対url---hugo-baseurl設定"&gt;1. 絶対URL - Hugo baseURL設定&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ファイル&lt;/strong&gt;: &lt;code&gt;hugo/hugo.toml&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;内容&lt;/strong&gt;: &lt;code&gt;baseURL = '&lt;/code&gt;&lt;a href="https://blog.plzhans.com/" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;https://blog.plzhans.com&lt;/code&gt;&lt;/a&gt;&lt;code&gt;'&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;sitemap.xml、RSSフィード、Open Graphなどで正しい絶対URLが生成されます&lt;/li&gt;&#10;&lt;li&gt;Sitemap (&lt;code&gt;sitemap.xml&lt;/code&gt;)、RSSフィード (&lt;code&gt;index.xml&lt;/code&gt;) はHugoが自動生成します&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;hugo server&lt;/code&gt;(開発時)では自動的に&lt;a href="http://localhost:1313/" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;localhost:1313&lt;/code&gt;&lt;/a&gt;を使用するため、別途の処理は不要です&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-robotstxtの自動生成"&gt;2. robots.txtの自動生成&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ファイル&lt;/strong&gt;: &lt;code&gt;hugo/hugo.toml&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;内容&lt;/strong&gt;: &lt;code&gt;enableRobotsTXT = true&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Hugoビルド時に&lt;code&gt;robots.txt&lt;/code&gt;が自動生成されます(すべてのクローラーを許可 + Sitemap URLを含む)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-schemaorg構造化データjson-ld"&gt;3. &lt;a href="http://schema.org/" target="_blank" rel="noopener noreferrer"&gt;Schema.org&lt;/a&gt;構造化データ(JSON-LD)&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ファイル&lt;/strong&gt;: &lt;code&gt;hugo/layouts/_default/single.html&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;記事ページ(&lt;code&gt;type != &amp;quot;page&amp;quot;&lt;/code&gt;)に&lt;code&gt;BlogPosting&lt;/code&gt;のJSON-LDを挿入します&lt;/li&gt;&#10;&lt;li&gt;含まれる項目: headline、datePublished、dateModified、author、description、mainEntityOfPage&lt;/li&gt;&#10;&lt;li&gt;Google検索結果でリッチスニペット(作成者、日付など)を表示できます&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="4-ogimage代表画像--open-graph"&gt;4. og:image(代表画像) / Open Graph&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ファイル&lt;/strong&gt;: &lt;code&gt;src/services/NotionExportService.mjs&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Notion同期時にコンテンツ内の最初の画像を検出し、front matterの&lt;code&gt;images&lt;/code&gt;フィールドに自動追加します&lt;/li&gt;&#10;&lt;li&gt;Open Graphメタタグは、Hugo内蔵テンプレート(&lt;code&gt;_internal/opengraph.html&lt;/code&gt;)によって出力され、&lt;code&gt;images&lt;/code&gt;を&lt;code&gt;og:image&lt;/code&gt;として使用します&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="5-meta-description--twitter-card"&gt;5. meta description / Twitter Card&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ファイル&lt;/strong&gt;: &lt;code&gt;src/services/NotionExportService.mjs&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Notionの「要約」プロパティをfront matterの&lt;code&gt;description&lt;/code&gt;フィールドとして出力します&lt;/li&gt;&#10;&lt;li&gt;Hugo内蔵のopengraph/twitter_cardsテンプレートおよびbaseof.htmlのmeta descriptionで使用されます&lt;/li&gt;&#10;&lt;li&gt;Twitter Cardのメタタグは、Hugo内蔵テンプレート(&lt;code&gt;_internal/twitter_cards.html&lt;/code&gt;)によって出力されます&lt;/li&gt;&#10;&lt;li&gt;その他のメタタグ(author、viewport)もテーマがデフォルトで提供します&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="6-canonical-url"&gt;6. Canonical URL&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ファイル&lt;/strong&gt;: &lt;code&gt;hugo/layouts/_default/baseof.html&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;テーマ(&lt;code&gt;m10c&lt;/code&gt;)の&lt;code&gt;baseof.html&lt;/code&gt;をオーバーライドして&lt;code&gt;&amp;lt;link rel=&amp;quot;canonical&amp;quot;&amp;gt;&lt;/code&gt;タグを追加します&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;.Permalink&lt;/code&gt;をcanonical URLとして使用します&lt;/li&gt;&#10;&lt;li&gt;多言語hreflangタグも一緒に含まれます(翻訳ページが存在する場合、&lt;code&gt;alternate&lt;/code&gt; + &lt;code&gt;x-default&lt;/code&gt;を出力)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="7-google-analyticsga4"&gt;7. Google Analytics(GA4)&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;テーマ(&lt;code&gt;m10c&lt;/code&gt;)でデフォルト提供されます&lt;/li&gt;&#10;&lt;li&gt;Google Search Console認証時にGA連携で認証可能です&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="多言語seoの主要要素"&gt;多言語SEOの主要要素&lt;/h2&gt;&#10;&lt;h3 id="html-lang属性"&gt;HTML lang属性&lt;/h3&gt;&#10;&lt;p&gt;ページの言語を明示することで、検索エンジンとスクリーンリーダーに言語情報を提供します。&lt;/p&gt;</description></item><item><title>Hugo + GitHubでブログを作る</title><link>https://blog.plzhans.com/ja/posts/94-hugo-github-blog/</link><pubDate>Tue, 10 Feb 2026 08:46:00 +0000</pubDate><guid>https://blog.plzhans.com/ja/posts/94-hugo-github-blog/</guid><description>&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/94-hugo-github-blog/assets/1_30a22a0f-7e83-80c6-b1d4-ed75cfa333a7_hu_570dbe114b4ec46d.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/94-hugo-github-blog/assets/1_30a22a0f-7e83-80c6-b1d4-ed75cfa333a7_hu_c21d93d0ed9b0132.png" alt="Notion執筆→Markdown変換→Hugoビルド→GitHub Pagesデプロイへとつながるブログ構築の流れを表したアイキャッチ画像" width="1200" height="686" loading="eager" fetchpriority="high"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;技術関連の内容をEvernoteや個人ドキュメントに整理してきたが、Notionのウェブサイト機能を活用してブログとして運用しようと準備していた。&lt;/p&gt;&#10;&lt;p&gt;しかし、Notionはカスタマイズに制約があり、カスタムドメインの利用にも追加費用が発生するため、少し悩むことになった。&lt;/p&gt;&#10;&lt;p&gt;代案として&lt;a href="https://velog.io/" target="_blank" rel="noopener noreferrer"&gt;velog&lt;/a&gt;に切り替えるか、Markdownで書き直してJekyllに移行するか検討した。&lt;/p&gt;&#10;&lt;p&gt;しかし、書きやすいNotionを諦めることはできなかった。結論はNotionで執筆し、静的ウェブサイトとしてデプロイすること!&lt;/p&gt;&#10;&lt;h2 id="目標"&gt;目標&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;mdファイルで書かれたドキュメントをHugoでビルドし&lt;/li&gt;&#10;&lt;li&gt;GitHub Pagesでデプロイを自動化する&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;💡 &lt;strong&gt;構築環境&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;テスト環境: Mac&lt;/li&gt;&#10;&lt;li&gt;デプロイ環境: GitHub Actions&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Hugoを選んだ理由&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;GitHub Starの数が多く、活発に更新されている&lt;/li&gt;&#10;&lt;li&gt;1000ページ以上をビルドする際にJekyllより速い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;現在このブログは次のような流れで運用している。(ソース参考: )&lt;/strong&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Notionで執筆&lt;br&gt;&#10;→ Notion APIでMarkdownに変換&lt;/p&gt;&#10;&lt;p&gt;→ Hugoで静的サイトをビルド&lt;/p&gt;&#10;&lt;p&gt;→ GitHub Pagesにデプロイ&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="事前準備"&gt;事前準備&lt;/h2&gt;&#10;&lt;h3 id="hugoテーマの選定"&gt;Hugoテーマの選定&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://themes.gohugo.io/" target="_blank" rel="noopener noreferrer"&gt;Hugo Themes&lt;/a&gt;でテーマをまず選んだ。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;選んだテーマ:&lt;/strong&gt; &lt;a href="https://themes.gohugo.io/themes/hugo-theme-m10c/" target="_blank" rel="noopener noreferrer"&gt;m10c&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;テーマ選定基準&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;SEO最適化機能をサポート&lt;/li&gt;&#10;&lt;li&gt;多言語サイト機能をサポート&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;m10cは一部機能が完全にはサポートされていないが、Hugoのレイアウトオーバーライドで補完できる。&lt;/p&gt;&#10;&lt;h3 id="hugoのインストール"&gt;Hugoのインストール&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;インストールドキュメント:&lt;/strong&gt; &lt;a href="https://gohugo.io/installation/" target="_blank" rel="noopener noreferrer"&gt;Installation Guide&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Hugoドキュメント:&lt;/strong&gt; &lt;a href="https://gohugo.io/documentation/" target="_blank" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Macの例&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hugoをインストール&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;brew install hugo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インストール確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;hugo --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="hugoサイトの作成"&gt;Hugoサイトの作成&lt;/h2&gt;&#10;&lt;h3 id="プロジェクトの初期化"&gt;プロジェクトの初期化&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 作業ディレクトリを作成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;mkdir hugo &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; hugo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hugoサイトを作成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;hugo new site .&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 生成結果を確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;tree&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# .&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── archetypes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# │ └── default.md&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── assets&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── content&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── data&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── hugo.toml&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── i18n&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── layouts&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ├── static&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# └── themes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="テーマのインストール"&gt;テーマのインストール&lt;/h3&gt;&#10;&lt;p&gt;Git submoduleを使ってテーマをインストールする。&lt;/p&gt;</description></item><item><title>GitHub Pagesでカスタムドメインを使う方法</title><link>https://blog.plzhans.com/ja/posts/86-github-pages-custom-domain/</link><pubDate>Tue, 10 Feb 2026 07:34:00 +0000</pubDate><guid>https://blog.plzhans.com/ja/posts/86-github-pages-custom-domain/</guid><description>&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/86-github-pages-custom-domain/assets/1_30a22a0f-7e83-80e7-8f4c-f143df1f0d00_hu_7553ab9e8c5df41.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/86-github-pages-custom-domain/assets/1_30a22a0f-7e83-80e7-8f4c-f143df1f0d00_hu_b1ec2068acbf4167.png" alt="GitHub Pagesにカスタムドメインを接続してHTTPSを適用する過程を示した代表画像" width="1200" height="670" loading="lazy"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h1 id="概要"&gt;概要&lt;/h1&gt;&#10;&lt;p&gt;GitHub Pagesは基本的に &lt;code&gt;https://{アカウント名}.&lt;/code&gt;&lt;a href="http://github.io/%7B%ec%a0%80%ec%9e%a5%ec%86%8c%eb%aa%85%7D/" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;github.io/{リポジトリ名}/&lt;/code&gt;&lt;/a&gt; 形式のURLを提供します。&lt;/p&gt;&#10;&lt;p&gt;この記事ではカスタムドメインを接続する方法を説明します。&lt;/p&gt;&#10;&lt;h1 id="サブドメインを使用する"&gt;サブドメインを使用する&lt;/h1&gt;&#10;&lt;p&gt;&lt;code&gt;hugosample.plzhans.com&lt;/code&gt; のようなサブドメインを使用する場合です。&lt;/p&gt;&#10;&lt;h2 id="dns設定"&gt;DNS設定&lt;/h2&gt;&#10;&lt;p&gt;ドメインのDNS設定でCNAMEレコードを追加します。&lt;/p&gt;&#10;&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/86-github-pages-custom-domain/assets/2_30222a0f-7e83-80d2-8bf8-df6ddbcd2239_hu_933599bf18f4d71c.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/86-github-pages-custom-domain/assets/2_30222a0f-7e83-80d2-8bf8-df6ddbcd2239_hu_a0ab5f3b54fca6b7.png" alt="サブドメインを{アカウント名}.github.ioに接続するCNAMEレコード登録画面" width="1200" height="148" loading="lazy"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;設定例&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Type: CNAME&lt;/li&gt;&#10;&lt;li&gt;Name: サブドメイン(例: hugosample)&lt;/li&gt;&#10;&lt;li&gt;Value: {アカウント名}.&lt;a href="http://github.io/" target="_blank" rel="noopener noreferrer"&gt;github.io&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="github-pages設定"&gt;GitHub Pages設定&lt;/h2&gt;&#10;&lt;p&gt;Repository → Settings → Pages → Custom domainでカスタムドメインを入力します。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;入力例:&lt;/strong&gt; hugosample.plzhans.com&lt;/p&gt;&#10;&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/86-github-pages-custom-domain/assets/3_30222a0f-7e83-80fe-875c-c3b270a89dd1_hu_96d203ce26896b2c.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/86-github-pages-custom-domain/assets/3_30222a0f-7e83-80fe-875c-c3b270a89dd1_hu_5cf93a89cfc0782f.png" alt="Repository Settings → PagesのCustom domainにドメインを入力する画面" width="1200" height="181" loading="lazy"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h1 id="apexドメインを使用する"&gt;apexドメインを使用する&lt;/h1&gt;&#10;&lt;p&gt;&lt;code&gt;plzhans.com&lt;/code&gt; のようにドメインのルートを使用する場合です。&lt;/p&gt;&#10;&lt;h2 id="apexドメインとは"&gt;apexドメインとは&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;www&lt;/code&gt; や &lt;code&gt;blog&lt;/code&gt; のようなサブドメインを付けないドメイン自体を指します。ルートドメイン、ネイキッドドメイン(naked domain)、zone apexとも呼ばれます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Apex: &lt;code&gt;plzhans.com&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;サブドメイン: &lt;code&gt;www.plzhans.com&lt;/code&gt;, &lt;code&gt;blog.plzhans.com&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;💡 &lt;strong&gt;なぜapexにはCNAMEを使えないのか&lt;/strong&gt;&lt;br&gt;&#10;サブドメインはCNAME一行で済みますが、apexはIPを直接記載するAレコードを使います。理由はDNS仕様にあります。&lt;/p&gt;&#10;&lt;p&gt;CNAMEレコードは同じ名前で他のレコードと共存できません。しかしapexには、そのゾーンを誰が管理しているかを示すSOAレコードとNSレコードが必ず存在しなければなりません。結局apexにCNAMEを入れると必須レコードと競合するため、標準に準拠したDNSでは登録自体が拒否されます。&lt;/p&gt;&#10;&lt;p&gt;GitHub Pagesがサブドメインとは異なり、apexに対してのみ4つのIPを案内しているのもこのためです。&lt;/p&gt;&#10;&lt;details&gt; &#10;&lt;summary&gt;CloudflareではapexにCNAMEが入ります&lt;/summary&gt; &#10;&lt;p&gt;Cloudflareを使っていてapexにCNAMEを入れたら、そのまま動作したという場合があります。&lt;strong&gt;CNAME Flattening&lt;/strong&gt; 機能のおかげです。&lt;/p&gt;&#10;&lt;p&gt;CloudflareがCNAMEの参照先を代わりに調べて最終的なIPアドレスを見つけ出し、外部からの問い合わせにはCNAMEではなくIPで応答します。設定画面にはCNAMEに見えますが、実際の応答はAレコードなので標準と競合しません。一部の状況ではデフォルトで動作し、そうでない場合は設定でオンにする必要があります。&lt;/p&gt;&#10;&lt;p&gt;参考: &lt;a href="https://developers.cloudflare.com/dns/cname-flattening/" target="_blank" rel="noopener noreferrer"&gt;Cloudflare CNAME flattening&lt;/a&gt;&lt;/p&gt;</description></item><item><title>HTTPS TLS/SSL 無料 vs 有料証明書</title><link>https://blog.plzhans.com/ja/posts/39-https-tls-ssl-free-vs-paid-certificates/</link><pubDate>Thu, 17 Mar 2022 16:48:00 +0900</pubDate><guid>https://blog.plzhans.com/ja/posts/39-https-tls-ssl-free-vs-paid-certificates/</guid><description>&lt;p&gt;&lt;picture&gt;&#10; &lt;source srcset="https://blog.plzhans.com/posts/39-https-tls-ssl-free-vs-paid-certificates/assets/1_2fe22a0f-7e83-805c-bf08-d71559e37b4a_hu_a5c51f871774194e.webp" type="image/webp"&gt;&#10; &lt;img src="https://blog.plzhans.com/posts/39-https-tls-ssl-free-vs-paid-certificates/assets/1_2fe22a0f-7e83-805c-bf08-d71559e37b4a_hu_a2d8511883e5b90d.png" alt="HTTPSに必要なTLS/SSL証明書の無料・有料・クラウドマネージド型の選択肢を比較する内容を表したカバー画像" width="1024" height="367" loading="eager" fetchpriority="high"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h2 id="概要"&gt;概要&lt;/h2&gt;&#10;&lt;p&gt;HTTPS通信のためにTLS/SSL証明書とドメインが必要です。&lt;/p&gt;&#10;&lt;p&gt;所有するドメインに対して発行され、クライアントは接続したドメインと証明書のドメインが一致するかを検証します。&lt;/p&gt;&#10;&lt;p&gt;この文書は、実務観点からドメイン別証明書発行方法を整理します。&lt;/p&gt;&#10;&lt;p&gt;理論よりも実務的な選択と実装に焦点を置きます。&lt;/p&gt;&#10;&lt;h2 id="ssl証明書発行および検証フロー"&gt;SSL証明書発行および検証フロー&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;核心ポイント&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;CA機関の役割&lt;/strong&gt;: サーバーの公開鍵を検証して署名し、信頼性を保証&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;発行業者の役割&lt;/strong&gt;: サーバーとCA機関の間で証明書発行手順を仲介&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;OSの役割&lt;/strong&gt;: CAルート証明書を事前に内蔵し、クライアントがサーバー証明書検証に使用&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;クライアントの役割&lt;/strong&gt;: OSに内蔵されたCAルート証明書でサーバー証明書の署名を検証し、信頼性を確認&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="mermaid"&gt;sequenceDiagram&#10; participant サーバー&#10; participant 発行業者&#10; participant CA機関&#10; participant OS&#10; participant クライアント&#10;&#10; %% 証明書発行段階&#10; Note over サーバー,CA機関: 1. 証明書発行段階&#10; サーバー-&gt;&gt;サーバー: 秘密鍵/公開鍵ペア生成&#10; サーバー-&gt;&gt;発行業者: 証明書購入要求&lt;br/&gt;(公開鍵 + ドメイン情報)&#10; 発行業者-&gt;&gt;CA機関: CSR(証明書署名要求)伝達&#10; CA機関-&gt;&gt;CA機関: ドメイン所有権検証&lt;br/&gt;(DNS/HTTP/Email方式)&#10; CA機関-&gt;&gt;CA機関: CA秘密鍵でサーバー公開鍵署名&#10; CA機関-&gt;&gt;発行業者: 署名済みSSL証明書発行&lt;br/&gt;(公開鍵 + CA署名 + ドメイン情報)&#10; 発行業者-&gt;&gt;サーバー: 証明書伝達&#10; サーバー-&gt;&gt;サーバー: 証明書と秘密鍵をサーバーにインストール&#10; CA機関-&gt;&gt;OS: CAルート証明書事前登録&lt;br/&gt;(ブラウザ/OS配布時に内蔵)&#10;&#10; %% HTTPS接続段階&#10; Note over サーバー,クライアント: 2. HTTPS接続段階&#10; クライアント-&gt;&gt;サーバー: HTTPSサイト接続要求&lt;br/&gt;(Client Hello)&#10; サーバー-&gt;&gt;クライアント: SSL証明書送信&lt;br/&gt;(Server Hello)&#10; クライアント-&gt;&gt;OS: CAルート証明書照会&lt;br/&gt;(証明書検証用)&#10; OS-&gt;&gt;クライアント: CAルート証明書返却&#10; クライアント-&gt;&gt;クライアント: 証明書有効性検証&lt;br/&gt;1) CAルート証明書で署名確認&lt;br/&gt;2) ドメイン一致確認&lt;br/&gt;3) 有効期間確認&#10;&#10; alt 証明書検証成功&#10; クライアント-&gt;&gt;クライアント: 安全なHTTPS接続表示 (🔒)&#10; Note over サーバー,クライアント: 以降暗号化通信開始&#10; else 証明書検証失敗&#10; クライアント-&gt;&gt;クライアント: セキュリティ警告表示&lt;br/&gt;(信頼できない証明書)&#10; end&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="tlsssl証明書とは"&gt;TLS/SSL証明書とは&lt;/h2&gt;&#10;&lt;p&gt;ウェブでHTTPをHTTPSに転換するために必要なデジタル証明書です。サーバーで秘密鍵を生成し&lt;/p&gt;</description></item></channel></rss>