<?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/en/categories/web/</link><description>Recent content in Web on plzhans blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 03 Sep 2026 12:52:00 +0000</lastBuildDate><atom:link href="https://blog.plzhans.com/en/categories/web/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Hugo Blog - From Start to SEO</title><link>https://blog.plzhans.com/en/posts/123-hugo-blog-guide/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://blog.plzhans.com/en/posts/123-hugo-blog-guide/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;This blog itself was built in this exact order. From the pipeline of writing in Notion, converting to Markdown, building with Hugo, and deploying to GitHub Pages, to connecting a custom domain, adding multilingual support, and applying security headers — here&amp;rsquo;s the order.&lt;/p&gt;&#10;&lt;h2 id="why-this-combination"&gt;Why This Combination&lt;/h2&gt;&#10;&lt;p&gt;A static site doesn&amp;rsquo;t need its own server to run, and hosting it for free on something like GitHub Pages already makes it fast and stable. The catch is that &amp;ldquo;static&amp;rdquo; tends to make the writing experience inconvenient — using Notion as a CMS solves that: you write in the editor you&amp;rsquo;re already used to, and an API pulls the Notion page straight into Markdown for the build. Hugo was chosen because, among static site generators, it builds fast and has a solid theme ecosystem.&lt;/p&gt;</description></item><item><title>4 Security Headers Flagged by an SEO Audit — Applying Them on Cloudflare Without Code</title><link>https://blog.plzhans.com/en/posts/120-cloudflare-security-headers-hsts-csp/</link><pubDate>Sun, 30 Aug 2026 01:25:00 +0000</pubDate><guid>https://blog.plzhans.com/en/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="Representative image showing a setup that splits security headers between Cloudflare and an HTML meta tag" 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="Representative image showing a setup that splits security headers between Cloudflare and an HTML meta tag" loading="lazy"&gt;&lt;/p&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;SEO audit reports sometimes flag four security headers: &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;, and &lt;code&gt;Referrer-Policy&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;At first glance it&amp;rsquo;s odd to see these under &amp;ldquo;SEO.&amp;rdquo; Short answer up front: &lt;strong&gt;these headers don&amp;rsquo;t directly boost your search ranking.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;This post covers why security headers show up in SEO audits, what each header actually does, and how to apply them on a static blog sitting behind Cloudflare in a combination that&amp;rsquo;s &lt;strong&gt;easy to maintain later&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Adding Multilingual Support to a Hugo Site</title><link>https://blog.plzhans.com/en/posts/93-hugo-multilingual-seo-setup/</link><pubDate>Wed, 11 Feb 2026 09:55:00 +0000</pubDate><guid>https://blog.plzhans.com/en/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="A representative image showing the configuration for applying multilingual support and SEO settings such as hreflang and canonical to a Hugo blog" width="1200" height="670" loading="eager" fetchpriority="high"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h2 id="goal"&gt;Goal&lt;/h2&gt;&#10;&lt;p&gt;Apply multilingual support and SEO optimization to a Hugo blog to maximize search engine exposure and provide the appropriate language version to multilingual users.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="seo-configuration"&gt;SEO Configuration&lt;/h2&gt;&#10;&lt;p&gt;SEO (Search Engine Optimization) is the work of optimizing a site&amp;rsquo;s structure and metadata so that search engines like Google can better understand the site&amp;rsquo;s content and surface it in search results.&lt;/p&gt;</description></item><item><title>Building a Blog with Hugo + GitHub</title><link>https://blog.plzhans.com/en/posts/94-hugo-github-blog/</link><pubDate>Tue, 10 Feb 2026 08:46:00 +0000</pubDate><guid>https://blog.plzhans.com/en/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="Featured image showing the blog-building flow: writing in Notion → converting to Markdown → building with Hugo → deploying to GitHub Pages" width="1200" height="686" loading="eager" fetchpriority="high"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;I had been keeping technical notes in Evernote and personal documents, and was preparing to run a blog using Notion&amp;rsquo;s website feature.&lt;/p&gt;&#10;&lt;p&gt;However, Notion had limitations on customization, and using a custom domain came with extra costs, which gave me pause.&lt;/p&gt;&#10;&lt;p&gt;As an alternative, I considered switching to &lt;a href="https://velog.io/" target="_blank" rel="noopener noreferrer"&gt;velog&lt;/a&gt; or rewriting everything in Markdown and moving to Jekyll.&lt;/p&gt;</description></item><item><title>Using a Custom Domain with GitHub Pages</title><link>https://blog.plzhans.com/en/posts/86-github-pages-custom-domain/</link><pubDate>Tue, 10 Feb 2026 07:34:00 +0000</pubDate><guid>https://blog.plzhans.com/en/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="Featured image showing the process of connecting a custom domain to GitHub Pages and applying HTTPS" width="1200" height="670" loading="lazy"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h1 id="overview"&gt;Overview&lt;/h1&gt;&#10;&lt;p&gt;By default, GitHub Pages provides a URL in the format &lt;code&gt;https://{account name}.&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/{repo name}/&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;This document explains how to connect a custom domain.&lt;/p&gt;&#10;&lt;h1 id="using-a-subdomain"&gt;Using a Subdomain&lt;/h1&gt;&#10;&lt;p&gt;This is the case where you use a subdomain such as &lt;code&gt;hugosample.plzhans.com&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="dns-settings"&gt;DNS Settings&lt;/h2&gt;&#10;&lt;p&gt;Add a CNAME record in your domain&amp;rsquo;s DNS settings.&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="Screen for registering a CNAME record connecting the subdomain to {account name}.github.io" width="1200" height="148" loading="lazy"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;</description></item><item><title>HTTPS TLS/SSL Free vs Paid Certificates</title><link>https://blog.plzhans.com/en/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/en/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="Cover image comparing free, paid, and cloud-managed options for the TLS/SSL certificates required for HTTPS" width="1024" height="367" loading="eager" fetchpriority="high"&gt;&#10; &lt;/picture&gt;&lt;/p&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;HTTPS communication requires a TLS/SSL certificate and domain.&lt;/p&gt;&#10;&lt;p&gt;Certificates are issued for owned domains, and clients verify that the accessed domain matches the certificate&amp;rsquo;s domain.&lt;/p&gt;&#10;&lt;p&gt;This document organizes domain-specific certificate issuance methods from a practical perspective.&lt;/p&gt;&#10;&lt;p&gt;It focuses on practical choices and implementation rather than theory.&lt;/p&gt;&#10;&lt;h2 id="ssl-certificate-issuance-and-verification-flow"&gt;SSL Certificate Issuance and Verification Flow&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Key Points&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>