블로그 SEO 실전 — 내부 링크, relatedPosts, 시리즈 네비게이션
블로그에 글을 30편 썼는데, 검색으로 들어온 사용자가 그 글 하나만 읽고 나갑니다. 페이지당 체류시간 40초, 이탈률 85%. 글의 품질이 아니라 글 사이의 연결이 없는 게 문제입니다.
내부 링크를 체계적으로 설계하면, 한 글에서 다른 글로 자연스럽게 이동하는 순환 구조가 만들어집니다. 체류시간이 늘고, 검색 엔진도 사이트 구조를 더 잘 이해합니다. 새 글이 검색에 빨리 노출되려면 IndexNow로 즉시 인덱싱을 요청하는 방법도 함께 활용하세요.
1내부 링크가 중요한 이유
내부 링크는 두 가지 역할을 합니다.
SEO: 크롤링 효율 + 페이지 권한 전달
검색 엔진 크롤러는 링크를 따라 페이지를 발견합니다. 내부 링크가 많은 페이지는 '중요한 페이지'로 인식됩니다. 메인 페이지의 높은 PageRank가 내부 링크를 통해 하위 페이지로 전달됩니다.
UX: 체류시간 + 페이지뷰 증가
글 하단에 관련 글 3~5개를 보여주면, 독자가 다음 글로 이동합니다. '한 편만 읽고 나가는' 패턴이 '3~4편 연속으로 읽는' 패턴으로 바뀝니다.
내부 링크 효과
- 고립된 페이지(orphan page): 어디서도 링크하지 않는 페이지는 크롤러가 발견하기 어렵습니다. sitemap에만 의존하게 됩니다.
- 깊은 계층: 메인 → 카테고리 → 글 (3 depth)까지는 괜찮지만, 4~5 depth부터는 크롤링 빈도가 떨어집니다.
- 앵커 텍스트: 내부 링크의 텍스트가 대상 페이지의 키워드와 관련 있어야 합니다. "여기를 클릭하세요" 대신 "CLS 최적화 방법"처럼 의미 있는 텍스트를 사용하세요.
2relatedPosts 상호 연결
블로그 글 하단에 "관련 글"을 보여주는 건 기본입니다. 핵심은 양방향 연결입니다. A 글에서 B를 추천하면, B 글에서도 A를 추천해야 합니다.
// _meta.json — 각 글에 relatedPosts 설정
// 이미지 최적화 글
{
"slug": "image-optimization-pagespeed-36mb-to-800kb",
"relatedPosts": [
"nextjs-pagespeed-optimization-38-to-88", // 허브 글
"lcp-optimization-motion-opacity-trap", // LCP 글
"nextjs-img-vs-image-pagespeed" // img vs Image
]
}
// 허브 글에서도 역방향 연결
{
"slug": "nextjs-pagespeed-optimization-38-to-88",
"relatedPosts": [
"image-optimization-pagespeed-36mb-to-800kb",
"cls-zero-typewriter-animation-fix",
"korean-webfont-pagespeed-render-blocking-css",
"lcp-optimization-motion-opacity-trap"
]
}// lib/blog.ts — 관련 글 조회 로직
export function getRelatedPosts(
currentSlug: string,
tags: string[],
category: string,
manualRelated: string[] = [],
limit: number = 5
) {
// 1순위: _meta.json에서 직접 지정한 글
const manual = manualRelated
.map(slug => getPost(slug))
.filter(Boolean);
// 2순위: 같은 태그를 가진 글 (자동)
const byTag = getAllPosts()
.filter(p => p.slug !== currentSlug)
.filter(p => p.tags.some(t => tags.includes(t)))
.sort((a, b) => /* 태그 겹침 수 내림차순 */);
// 중복 제거 후 limit개 반환
return [...manual, ...byTag]
.filter(unique)
.slice(0, limit);
}수동 지정과 태그 기반 자동 추천을 결합하면, 매번 관련 글을 일일이 정하지 않아도 됩니다. 태그가 겹치는 글이 자동으로 추천됩니다.
3시리즈 네비게이션
연재 글에는 "1편 / 2편 / 3편" 네비게이션이 필요합니다. 독자가 이전 글과 다음 글로 자연스럽게 이동할 수 있어야 합니다.
// 시리즈 네비게이션 컴포넌트 예시
function SeriesNav({ currentSlug, series }) {
const currentIndex = series.findIndex(
s => s.slug === currentSlug
);
return (
<div className="border rounded-xl p-4 my-8">
<h3 className="font-bold mb-3">
{series.title} ({currentIndex + 1}/{series.items.length})
</h3>
<div className="space-y-1">
{series.items.map((item, idx) => (
<Link
key={item.slug}
href={`/blog/${item.slug}`}
className={idx === currentIndex
? "font-bold text-primary"
: "text-muted-foreground hover:text-foreground"
}
>
{idx + 1}편: {item.title}
</Link>
))}
</div>
<div className="flex justify-between mt-4">
{currentIndex > 0 && (
<Link href={series.items[currentIndex - 1].slug}>
← 이전 편
</Link>
)}
{currentIndex < series.items.length - 1 && (
<Link href={series.items[currentIndex + 1].slug}>
다음 편 →
</Link>
)}
</div>
</div>
);
}시리즈 글 상단이나 하단에 전체 목록 + 이전/다음 버튼을 넣으면, 한 편을 읽은 독자가 시리즈 전체를 읽을 확률이 높아집니다.
4카테고리 페이지 설계
블로그 목록 페이지가 모든 글을 한꺼번에 보여주면, 검색 엔진은 이 페이지의 주제를 파악하기 어렵습니다. 카테고리별로 분류하면 주제 관련성이 명확해집니다.
| 구조 | URL | 용도 |
|---|---|---|
| 블로그 메인 | /blog | 전체 글 목록 + 카테고리 필터 |
| 카테고리 필터 | /blog?category=개발 | 해당 카테고리 글만 표시 |
| 글 상세 | /blog/post-slug | 본문 + 관련 글 + 시리즈 |
이 구조에서 내부 링크 순환이 만들어집니다: 블로그 목록 → 글 상세 → 관련 글(또 다른 상세) → 블로그 목록. 사용자가 사이트 안에서 계속 돌아다니게 됩니다.
5RSS Feed 자동 생성
RSS feed는 직접적인 SEO 효과보다 구독 기반 트래픽에 중요합니다. Feedly, Inoreader 같은 RSS 리더에서 자동으로 수집됩니다.
// app/feed.xml/route.ts
import { getAllPosts } from "@/lib/blog";
export async function GET() {
const posts = getAllPosts();
const baseUrl = "https://example.com";
const items = posts.map(post => `
<item>
<title>${escapeXml(post.title)}</title>
<link>${baseUrl}/blog/${post.slug}</link>
<description>${escapeXml(post.excerpt)}</description>
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
<guid>${baseUrl}/blog/${post.slug}</guid>
<category>${post.category}</category>
</item>`).join("");
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Your Blog</title>
<link>${baseUrl}/blog</link>
<description>블로그 설명</description>
<atom:link href="${baseUrl}/feed.xml"
rel="self" type="application/rss+xml"/>
${items}
</channel>
</rss>`;
return new Response(xml, {
headers: { "Content-Type": "application/xml" },
});
}HTML <head>에 RSS 링크를 추가하면 브라우저가 자동 감지합니다:
// app/layout.tsx metadata에 추가
export const metadata = {
alternates: {
types: {
"application/rss+xml": "/feed.xml",
},
},
};6내부 링크 구조 정리
내부 링크 체크리스트
내부 링크는 SEO의 한 요소일 뿐이며, 콘텐츠 품질이 가장 중요합니다. 과도한 내부 링크(한 페이지에 50개 이상)는 오히려 역효과가 날 수 있습니다.
댓글
(4개)로그인하면 댓글을 작성할 수 있습니다.
RSS feed 자동 생성은 SEO보다 구독자 확보 측면에서 중요하네요. Feedly 같은 리더에서 자동 수집되니까.
블로그 목록 → 상세 → 관련글 순환 구조 설명이 명확합니다. 사일로 구조라고도 하는데, 카테고리별로 묶으면 SEO에 확실히 좋습니다.
시리즈 네비게이션 컴포넌트, 이거 바로 따라 만들어야겠습니다. 연재 글인데 이전/다음 글 링크가 없어서 이탈률이 높았거든요.
관련 글
© 2026 TreeRU. All rights reserved.
본 콘텐츠의 저작권은 TreeRU에 있으며, 출처를 밝히지 않은 무단 전재 및 재배포를 금합니다. 인용 시 출처(treeru.com)를 반드시 명시해 주세요.