Skip to content

Commit 1788043

Browse files
committed
feat: sitemap, feed 스크립트 추가
1 parent ac6e95e commit 1788043

File tree

7 files changed

+90
-9
lines changed

7 files changed

+90
-9
lines changed

components/Footer.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,34 @@ import '@fortawesome/fontawesome-free/css/all.min.css';
22

33
export default function Footer() {
44
return (
5-
<footer className="bg-slate-800 text-gray-400 px-6 py-6 text-sm">
5+
<footer className="z-0 relative bg-slate-800 text-gray-400 px-6 py-6 text-sm">
66
<div className="flex flex-col md:flex-row justify-between items-center text-sm">
77
<div className="mb-2 md:mb-0">© 2025 Eottabom's Lab. All rights reserved.</div>
88
<div className="flex items-center space-x-6">
99
<a
10-
href="mailto:[email protected]"
11-
className="flex items-center gap-2 hover:text-white transition"
10+
href="mailto:[email protected]"
11+
className="flex items-center gap-2 hover:text-white transition"
1212
>
13-
<i className="fas fa-envelope text-base" aria-hidden="true" />
13+
<i className="fas fa-envelope text-base" aria-hidden="true"/>
1414
<span>Email</span>
1515
</a>
1616
<a
17-
href="https://github.com/eottabom"
18-
className="flex items-center gap-2 hover:text-white transition"
17+
href="https://github.com/eottabom"
18+
className="flex items-center gap-2 hover:text-white transition"
1919
>
20-
<i className="fab fa-github text-base" aria-hidden="true" />
20+
<i className="fab fa-github text-base" aria-hidden="true"/>
2121
<span>GitHub</span>
2222
</a>
23+
<a
24+
href="/feed.xml"
25+
className="flex items-center gap-2 hover:text-white transition"
26+
target="_blank"
27+
rel="noopener noreferrer"
28+
>
29+
<i className="fas fa-rss text-base" aria-hidden="true"/>
30+
<span>RSS</span>
31+
</a>
32+
2333
</div>
2434
</div>
2535
</footer>

package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
"scripts": {
66
"dev": "next dev",
77
"build": "next build",
8-
"start": "next start"
8+
"start": "next start",
9+
"generate:sitemap": "ts-node scripts/generate-sitemap.ts",
10+
"generate:rss": "ts-node scripts/generate-rss.ts",
11+
"generate:seo": "npm run generate:sitemap && npm run generate:rss"
912
},
1013
"dependencies": {
1114
"gray-matter": "^4.0.3",
@@ -31,6 +34,7 @@
3134
"autoprefixer": "^10.4.0",
3235
"postcss": "^8.4.0",
3336
"tailwindcss": "^3.4.0",
34-
"typescript": "5.8.3"
37+
"typescript": "5.8.3",
38+
"ts-node": "^10.9.2"
3539
}
3640
}

public/google18352289b026fe2f.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
google-site-verification: google18352289b026fe2f.html
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
naver-site-verification: naverd3d26ca1df83352df039700b1d0c3bb8.html

public/robots.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
User-agent: *
2+
Allow: /
3+
4+
Sitemap: http://eottabom.github.io/sitemap.xml

scripts/generate-rss.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { getSortedPostsDataWithContent } from '../lib/posts';
4+
5+
const BASE_URL = 'https://eottabom.github.io';
6+
7+
async function generateRSS() {
8+
const posts = await getSortedPostsDataWithContent();
9+
10+
const items = posts.slice(0, 20).map(post => `
11+
<item>
12+
<title>${post.title}</title>
13+
<link>${BASE_URL}/post/${post.id}</link>
14+
<guid isPermaLink="true">${BASE_URL}/post/${post.id}</guid>
15+
<description>${post.summary || ''}</description>
16+
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
17+
</item>`).join('');
18+
19+
const rss = `<?xml version="1.0" encoding="UTF-8"?>
20+
<rss version="2.0">
21+
<channel>
22+
<title>Eottabom Blog</title>
23+
<link>${BASE_URL}</link>
24+
<description>Learnings from a considerate developer</description>
25+
<language>ko</language>
26+
${items}
27+
</channel>
28+
</rss>`;
29+
30+
fs.writeFileSync(path.join('public', 'feed.xml'), rss.trim());
31+
console.log('feed.xml generated');
32+
}
33+
34+
generateRSS();

scripts/generate-sitemap.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { getAllPostIds } from '../lib/posts';
4+
5+
const BASE_URL = 'https://eottabom.github.io';
6+
7+
const generateSitemap = () => {
8+
const posts = getAllPostIds();
9+
10+
const urls = posts.map(({ params }) => `
11+
<url>
12+
<loc>${BASE_URL}/post/${params.id}</loc>
13+
<changefreq>weekly</changefreq>
14+
<priority>0.7</priority>
15+
</url>
16+
`).join('');
17+
18+
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
19+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
20+
${urls}
21+
</urlset>`;
22+
23+
fs.writeFileSync(path.join('public', 'sitemap.xml'), sitemap.trim());
24+
console.log('sitemap.xml generated');
25+
};
26+
27+
generateSitemap();

0 commit comments

Comments
 (0)