Skip to content

Commit 615e855

Browse files
fix(seo): 다국어 URL 구조 개선 - slug suffix 제거 및 404 리다이렉트 추가
EN/JA 포스트 URL에서 -en/-ja suffix를 제거하여 깔끔한 URL 구조로 전환 - /en/2026/02/19/okaibox-dev-diary-day2-en/ → /en/2026/02/19/okaibox-dev-diary-day2/ - 266개 포스트에 slug front matter 추가 및 permalink/redirect_from 설정 - hreflang 태그 로직 단순화 (default.html) - 포스트 페이지 헤더 언어 전환 시 같은 글의 다른 언어 버전으로 이동 (header.html) - 본문 내부 링크 159개 수정 (49개 파일) - 날짜 불일치/크로스 언어 등 34개 추가 리다이렉트 설정 - privacy 페이지 /en/privacy/, /ja/privacy/ 리다이렉트 추가
1 parent bbe00f6 commit 615e855

270 files changed

Lines changed: 1281 additions & 186 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

_includes/header.html

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,31 @@
5353
<div class="header-utilities">
5454
<!-- 언어 전환 (인라인) -->
5555
<div class="language-switcher">
56-
{% for lang in site.languages %}
57-
{% if lang == site.default_lang %}
58-
{% assign lang_url = '/' %}
59-
{% else %}
60-
{% assign lang_url = '/' | append: lang | append: '/' %}
61-
{% endif %}
62-
<a href="{{ lang_url | relative_url }}" class="lang-btn {% if lang == current_lang %}active{% endif %}">
63-
{{ lang | upcase }}
64-
</a>
65-
{% endfor %}
56+
{% if page.layout == "post" %}
57+
{%- assign post_date_path = page.date | date: "/%Y/%m/%d/" -%}
58+
{%- assign post_base_slug = page.slug -%}
59+
{% for lang in site.languages %}
60+
{% if lang == site.default_lang %}
61+
{% assign lang_url = post_date_path | append: post_base_slug | append: '/' %}
62+
{% else %}
63+
{% assign lang_url = '/' | append: lang | append: post_date_path | append: post_base_slug | append: '/' %}
64+
{% endif %}
65+
<a href="{{ lang_url | relative_url }}" class="lang-btn {% if lang == current_lang %}active{% endif %}">
66+
{{ lang | upcase }}
67+
</a>
68+
{% endfor %}
69+
{% else %}
70+
{% for lang in site.languages %}
71+
{% if lang == site.default_lang %}
72+
{% assign lang_url = '/' %}
73+
{% else %}
74+
{% assign lang_url = '/' | append: lang | append: '/' %}
75+
{% endif %}
76+
<a href="{{ lang_url | relative_url }}" class="lang-btn {% if lang == current_lang %}active{% endif %}">
77+
{{ lang | upcase }}
78+
</a>
79+
{% endfor %}
80+
{% endif %}
6681
</div>
6782

6883
<!-- 다크모드 토글 -->

_layouts/default.html

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,39 +13,22 @@
1313

1414
<!-- 다국어 hreflang 태그 -->
1515
{% if page.layout == "post" %}
16-
{%- assign page_lang = page.lang | default: site.default_lang -%}
17-
{%- assign post_slug = page.slug -%}
18-
{%- if page_lang == "en" -%}
19-
{%- assign slug_end = post_slug.size | minus: 3 -%}
20-
{%- assign base_slug = post_slug | slice: 0, slug_end -%}
21-
{%- elsif page_lang == "ja" -%}
22-
{%- assign slug_end = post_slug.size | minus: 3 -%}
23-
{%- assign base_slug = post_slug | slice: 0, slug_end -%}
24-
{%- else -%}
25-
{%- assign base_slug = post_slug -%}
26-
{%- endif -%}
16+
{%- assign base_slug = page.slug -%}
2717
{%- assign date_path = page.date | date: "/%Y/%m/%d/" -%}
2818
<link rel="alternate" hreflang="ko" href="{{ site.url }}{{ date_path }}{{ base_slug }}/" />
29-
<link rel="alternate" hreflang="en" href="{{ site.url }}/en{{ date_path }}{{ base_slug }}-en/" />
30-
<link rel="alternate" hreflang="ja" href="{{ site.url }}/ja{{ date_path }}{{ base_slug }}-ja/" />
19+
<link rel="alternate" hreflang="en" href="{{ site.url }}/en{{ date_path }}{{ base_slug }}/" />
20+
<link rel="alternate" hreflang="ja" href="{{ site.url }}/ja{{ date_path }}{{ base_slug }}/" />
3121
<link rel="alternate" hreflang="x-default" href="{{ site.url }}{{ date_path }}{{ base_slug }}/" />
3222
{% else %}
33-
{% unless paginator and paginator.page > 1 %}
34-
{%- assign base_path = page.url | remove: '/en' | remove: '/ja' -%}
23+
{%- assign base_path = page.url | remove: '/en' | remove: '/ja' -%}
3524
<link rel="alternate" hreflang="ko" href="{{ site.url }}{{ base_path }}" />
3625
<link rel="alternate" hreflang="x-default" href="{{ site.url }}{{ base_path }}" />
3726
{% unless page.multilingual == false %}
3827
<link rel="alternate" hreflang="en" href="{{ site.url }}/en{{ base_path }}" />
3928
<link rel="alternate" hreflang="ja" href="{{ site.url }}/ja{{ base_path }}" />
4029
{% endunless %}
41-
{% endunless %}
4230
{% endif %}
4331

44-
<!-- 페이지네이션 noindex -->
45-
{% if paginator and paginator.page > 1 %}
46-
<meta name="robots" content="noindex, follow">
47-
{% endif %}
48-
4932
<!-- Favicon -->
5033
<link rel="icon" type="image/x-icon" href="{{ '/assets/favicons/favicon.ico' | relative_url }}">
5134
<link rel="apple-touch-icon" sizes="180x180" href="{{ '/assets/favicons/apple-touch-icon.png' | relative_url }}">

_posts/2020-03-15-why-i-use-docker-en.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Development, DevOps]
66
tags: [Docker, Container, Deployment, DevEnvironment, DevOps]
77
author: "Kevin Park"
88
lang: en
9+
slug: why-i-use-docker
910
excerpt: "I switched every project to Docker two years ago. Low barrier to entry, easy deployments... but is it really all upside?"
1011
permalink: /en/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/03/15/why-i-use-docker-en/
14+
- /en/2020/03/15/why-i-use-docker-en/
15+
1316
---
1417

1518
# My Honest Review After Using Docker for Every Project for 2 Years

_posts/2020-03-15-why-i-use-docker-ja.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Development, DevOps]
66
tags: [Docker, コンテナ, デプロイ, 開発環境, DevOps]
77
author: "Kevin Park"
88
lang: ja
9+
slug: why-i-use-docker
910
excerpt: "2年前からすべてのプロジェクトをDocker基盤に切り替えました。導入障壁が低くてデプロイも楽ですが、本当にメリットだけでしょうか?"
1011
permalink: /ja/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/03/15/why-i-use-docker-ja/
14+
- /ja/2020/03/15/why-i-use-docker-ja/
15+
1316
---
1417

1518
# Dockerを2年間すべてのプロジェクトで使ってみた正直な感想

_posts/2020-03-16-developer-laziness-burnout-en.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Life, DevDiary]
66
tags: [Developer, Burnout, Laziness, Growth, Experience]
77
author: "Kevin Park"
88
lang: en
9+
slug: developer-laziness-burnout
910
excerpt: "I still love coding, but my hands just won't move. The architecture is all planned out in my head, yet execution feels impossible. Am I the only one?"
1011
permalink: /en/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/03/16/developer-laziness-burnout-en/
14+
- /en/2020/03/16/developer-laziness-burnout-en/
15+
1316
---
1417

1518
# When Coding Is Fun But Your Hands Won't Move

_posts/2020-03-16-developer-laziness-burnout-ja.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Life, DevDiary]
66
tags: [開発者, バーンアウト, 怠惰, 自己成長, 開発経験]
77
author: "Kevin Park"
88
lang: ja
9+
slug: developer-laziness-burnout
910
excerpt: "開発が嫌いになったわけじゃないのに手が動かない。頭の中では設計が完了しているのに実行できない。これって自分だけでしょうか?"
1011
permalink: /ja/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/03/16/developer-laziness-burnout-ja/
14+
- /ja/2020/03/16/developer-laziness-burnout-ja/
15+
1316
---
1417

1518
# 開発は楽しいのに手が動かない

_posts/2020-04-20-cloud-vs-onpremise-server-en.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Development, DevOps]
66
tags: [Server, Cloud, AWS, OnPremise, IDC, Migration]
77
author: "Kevin Park"
88
lang: en
9+
slug: cloud-vs-onpremise-server
910
excerpt: "New projects go to the cloud. Old ones stay on IDC servers. I keep telling myself I'll migrate them... but somehow never do."
1011
permalink: /en/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/04/20/cloud-vs-onpremise-server-en/
14+
- /en/2020/04/20/cloud-vs-onpremise-server-en/
15+
1316
---
1417

1518
# The Transition From On-Premise to Cloud

_posts/2020-04-20-cloud-vs-onpremise-server-ja.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Development, DevOps]
66
tags: [サーバー, クラウド, AWS, オンプレミス, IDC, マイグレーション]
77
author: "Kevin Park"
88
lang: ja
9+
slug: cloud-vs-onpremise-server
910
excerpt: "新しいプロジェクトはクラウド、既存のものはIDCそのまま。毎回移行しようと思いつつ応急処置だけして先延ばしにしている。"
1011
permalink: /ja/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/04/20/cloud-vs-onpremise-server-ja/
14+
- /ja/2020/04/20/cloud-vs-onpremise-server-ja/
15+
1316
---
1417

1518
# オンプレミスからクラウドへの過渡期

_posts/2020-04-21-mysql-uuid-usage-en.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Development, Database]
66
tags: [MySQL, UUID, Security, Database, PHP]
77
author: "Kevin Park"
88
lang: en
9+
slug: mysql-uuid-usage
910
excerpt: "Using auto_increment PKs directly in URLs gets flagged in every security audit. But replacing all PKs with UUIDs is wildly impractical. Here's the realistic middle ground."
1011
permalink: /en/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/04/21/mysql-uuid-usage-en/
14+
- /en/2020/04/21/mysql-uuid-usage-en/
15+
1316
---
1417

1518
# Why You Shouldn't Expose Auto Increment PKs in URLs

_posts/2020-04-21-mysql-uuid-usage-ja.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ categories: [Development, Database]
66
tags: [MySQL, UUID, セキュリティ, データベース, PHP]
77
author: "Kevin Park"
88
lang: ja
9+
slug: mysql-uuid-usage
910
excerpt: "auto_incrementのPKをそのままURLに使うと、セキュリティ監査で毎回指摘される。かといってPKを全部UUIDに変えるのは非効率すぎる。現実的な妥協案をまとめました。"
1011
permalink: /ja/:year/:month/:day/:title/
1112
redirect_from:
1213
- /2020/04/21/mysql-uuid-usage-ja/
14+
- /ja/2020/04/21/mysql-uuid-usage-ja/
15+
1316
---
1417

1518
# Auto Increment PKをURLに露出してはいけない理由

0 commit comments

Comments
 (0)