Skip to content

Commit 989af80

Browse files
feat: improve SEO with keyword optimization and structured data
Add minesweeper/지뢰찾기 keywords to title, description, and meta tags for better search engine discoverability. Change structured data from Organization to VideoGame schema. Expand sitemap from 3 to 7 URLs. Unify hardcoded GitHub Pages URLs to use environment variable. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c194c17 commit 989af80

4 files changed

Lines changed: 77 additions & 27 deletions

File tree

src/app/layout.tsx

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,25 @@ const siteUrl = host || 'https://gamulpung.com';
2222
export const metadata: Metadata = {
2323
metadataBase: new URL(siteUrl),
2424
title: {
25-
default: 'Gamulpung',
25+
default: 'Gamulpung - Infinite Multiplayer Minesweeper | 무한 멀티플레이어 지뢰찾기',
2626
template: '%s | Gamulpung',
2727
},
28-
description: 'Gamulpung, Web Multi-play Infinity Minesweeper Game',
28+
description:
29+
'Play infinite multiplayer minesweeper online for free. Explore an endless map with real-time co-op. 무한으로 펼쳐지는 맵에서 다른 플레이어와 실시간으로 함께하는 온라인 지뢰찾기 게임.',
30+
keywords: [
31+
'minesweeper',
32+
'multiplayer minesweeper',
33+
'online minesweeper',
34+
'infinite minesweeper',
35+
'co-op minesweeper',
36+
'browser game',
37+
'지뢰찾기',
38+
'멀티플레이어 지뢰찾기',
39+
'온라인 지뢰찾기',
40+
'무한 지뢰찾기',
41+
'지뢰찾기 같이하기',
42+
'지뢰찾기 온라인',
43+
],
2944
alternates: {
3045
canonical: '/',
3146
languages: {
@@ -39,17 +54,23 @@ export const metadata: Metadata = {
3954
alternateLocale: 'ko_KR',
4055
url: siteUrl,
4156
siteName: 'Gamulpung',
57+
title: 'Gamulpung - Infinite Multiplayer Minesweeper',
58+
description:
59+
'Play infinite multiplayer minesweeper online for free. Explore an endless map with real-time co-op.',
4260
images: [
4361
{
4462
url: siteUrl + '/ogimage.png',
45-
alt: 'Gamulpung',
63+
width: 1200,
64+
height: 630,
65+
alt: 'Gamulpung - Infinite Multiplayer Minesweeper Game',
4666
},
4767
],
4868
},
4969
twitter: {
5070
card: 'summary_large_image',
51-
title: 'Gamulpung',
52-
description: 'Gamulpung, Web Multi-play Infinity Minesweeper Game',
71+
title: 'Gamulpung - Infinite Multiplayer Minesweeper',
72+
description:
73+
'Play infinite multiplayer minesweeper online for free. Explore an endless map with real-time co-op.',
5374
images: siteUrl + '/ogimage.png',
5475
},
5576
};
@@ -71,10 +92,29 @@ export default function RootLayout({
7192
dangerouslySetInnerHTML={{
7293
__html: JSON.stringify({
7394
'@context': 'https://schema.org',
74-
'@type': 'Organization',
75-
name: 'Gamulpung',
95+
'@type': 'VideoGame',
96+
name: 'Gamulpung - Infinite Multiplayer Minesweeper',
97+
alternateName: '가물퐁 - 무한 멀티플레이어 지뢰찾기',
98+
description:
99+
'Play infinite multiplayer minesweeper online for free. Explore an endless map with real-time co-op.',
76100
url: siteUrl,
77-
logo: siteUrl + '/icon.png',
101+
image: siteUrl + '/ogimage.png',
102+
genre: ['Puzzle', 'Multiplayer', 'Strategy'],
103+
gamePlatform: 'Web Browser',
104+
applicationCategory: 'Game',
105+
operatingSystem: 'Any',
106+
playMode: ['MultiPlayer', 'CoOperative'],
107+
numberOfPlayers: {
108+
'@type': 'QuantitativeValue',
109+
minValue: 1,
110+
},
111+
offers: {
112+
'@type': 'Offer',
113+
price: '0',
114+
priceCurrency: 'USD',
115+
availability: 'https://schema.org/InStock',
116+
},
117+
inLanguage: ['en', 'ko'],
78118
}),
79119
}}
80120
/>
@@ -87,11 +127,6 @@ export default function RootLayout({
87127
'@type': 'WebSite',
88128
name: 'Gamulpung',
89129
url: siteUrl,
90-
potentialAction: {
91-
'@type': 'SearchAction',
92-
target: siteUrl + '/?q={search_term_string}',
93-
'query-input': 'required name=search_term_string',
94-
},
95130
}),
96131
}}
97132
/>

src/app/play/layout.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,34 @@
11
import type { Metadata } from 'next';
22

3-
const host = 'https://gamultong.github.io/gamulpung-client/';
3+
const host = process.env.NEXT_PUBLIC_HOST || 'https://gamulpung.com';
44

55
export const metadata: Metadata = {
6-
title: 'Play',
7-
description: 'Play infinite multiplayer Minesweeper in your browser.',
6+
title: 'Play Minesweeper Online - 지뢰찾기 플레이',
7+
description:
8+
'Play infinite multiplayer minesweeper online for free. No download needed. 무한 맵 온라인 지뢰찾기를 지금 바로 플레이하세요.',
89
alternates: {
910
canonical: '/play',
1011
},
1112
openGraph: {
1213
type: 'website',
1314
url: host + '/play',
14-
title: 'Play | Gamulpung',
15-
description: 'Play infinite multiplayer Minesweeper in your browser.',
15+
title: 'Play Minesweeper Online | Gamulpung',
16+
description:
17+
'Play infinite multiplayer minesweeper online for free. No download, real-time co-op.',
1618
images: [
1719
{
1820
url: host + '/ogimage.png',
19-
alt: 'Gamulpung',
21+
width: 1200,
22+
height: 630,
23+
alt: 'Gamulpung - Play Infinite Multiplayer Minesweeper Online',
2024
},
2125
],
2226
},
2327
twitter: {
2428
card: 'summary_large_image',
25-
title: 'Play | Gamulpung',
26-
description: 'Play infinite multiplayer Minesweeper in your browser.',
29+
title: 'Play Minesweeper Online | Gamulpung',
30+
description:
31+
'Play infinite multiplayer minesweeper online for free. No download, real-time co-op.',
2732
images: host + '/ogimage.png',
2833
},
2934
};

src/app/robots.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { MetadataRoute } from 'next';
22

33
export default function robots(): MetadataRoute.Robots {
4-
const host = 'https://gamultong.github.io/gamulpung-client/';
4+
const host = process.env.NEXT_PUBLIC_HOST || 'https://gamulpung.com';
55
return {
66
rules: [
77
{

src/app/sitemap.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
import type { MetadataRoute } from 'next';
22

33
export default function sitemap(): MetadataRoute.Sitemap {
4-
const host = 'https://gamultong.github.io/gamulpung-client/';
4+
const host = process.env.NEXT_PUBLIC_HOST || 'https://gamulpung.com';
55
const now = new Date();
6-
const routes = ['/', '/documents', '/play'];
7-
return routes.map(path => ({
6+
7+
const routes: { path: string; priority: number; changeFrequency: MetadataRoute.Sitemap[number]['changeFrequency'] }[] = [
8+
{ path: '/', priority: 1.0, changeFrequency: 'weekly' },
9+
{ path: '/play', priority: 0.9, changeFrequency: 'weekly' },
10+
{ path: '/documents', priority: 0.7, changeFrequency: 'monthly' },
11+
{ path: '/documents/how-to-play', priority: 0.8, changeFrequency: 'monthly' },
12+
{ path: '/documents/contribute-guide', priority: 0.6, changeFrequency: 'monthly' },
13+
{ path: '/documents/blog', priority: 0.6, changeFrequency: 'weekly' },
14+
{ path: '/documents/release-notes', priority: 0.5, changeFrequency: 'monthly' },
15+
];
16+
17+
return routes.map(({ path, priority, changeFrequency }) => ({
818
url: host + path,
919
lastModified: now,
10-
changeFrequency: 'weekly',
11-
priority: path === '/' ? 1 : 0.8,
20+
changeFrequency,
21+
priority,
1222
}));
1323
}

0 commit comments

Comments
 (0)