개발자 블로그·포트폴리오 SEO, 제대로 하는 법

SEO개발자블로그포트폴리오검색엔진Next.js구글서치콘솔

개발자 블로그를 운영하면서 이런 생각 한 번쯤 해보셨을 겁니다. "글은 열심히 쓰는데 왜 아무도 안 찾아오지?"

콘텐츠가 좋아도 구글이 내 사이트를 제대로 이해하지 못하면, 검색 결과에서 좋은 자리를 차지하기 어렵습니다. SEO(Search Engine Optimization)는 그 간극을 좁히는 작업입니다.

마케터들이 말하는 SEO가 아니라, 개발자가 직접 사이트를 만들고 운영할 때 챙겨야 하는 기술 SEO를 이야기합니다. 이 블로그도 같은 고민을 하면서 적용한 내용들입니다.


구글은 내 사이트를 어떻게 이해할까요?

SEO를 잘하려면 구글이 사이트를 어떻게 탐색하는지부터 알아야 합니다.

구글에는 크롤러(crawler) 라는 프로그램이 있습니다. 흔히 '봇' 또는 '스파이더'라고도 부릅니다. 이 크롤러가 인터넷을 돌아다니며 페이지를 방문하고, 내용을 읽어서 색인(index) 에 저장합니다. 그리고 누군가 검색어를 입력하면, 저장해둔 색인에서 가장 관련도 높은 페이지들을 순서대로 보여줍니다.

SEO는 크게 두 단계에서 이루어집니다.

  1. 크롤링과 색인: 구글 봇이 내 사이트를 방문해서 페이지 내용을 저장하게 하기
  2. 순위 결정: 저장된 페이지가 검색 결과에서 더 앞에 뜨게 하기

기술 SEO는 주로 1단계, 즉 "구글이 내 사이트를 제대로 읽을 수 있게 하는 것"에 집중합니다.


sitemap.xml — 구글에게 지도를 건네는 것

사이트맵은 내 사이트에 어떤 페이지들이 있는지 목록을 정리한 XML 파일입니다. 구글 봇에게 "우리 사이트 이렇게 생겼어, 이 페이지들 꼭 봐줘"라고 알려주는 용도입니다.

사이트맵이 없어도 구글은 사이트를 발견할 수 있습니다. 하지만 있으면 훨씬 빠르고 빠짐없이 색인됩니다. 특히 새로 만든 사이트, 페이지가 많은 사이트, 외부 링크가 거의 없는 사이트일수록 사이트맵의 역할이 중요합니다.

Next.js App Router를 쓴다면 app/sitemap.ts 파일을 만들어서 동적으로 생성할 수 있습니다.

// app/sitemap.ts
import { MetadataRoute } from 'next'

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    {
      url: 'https://yourdomain.com',
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 1,
    },
    {
      url: 'https://yourdomain.com/blog',
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.8,
    },
    // 블로그 포스트들은 CMS나 파일 목록에서 동적으로 추가
  ]
}

만들었으면 Google Search Console에서 사이트맵 제출을 해주세요. 수동 제출이 없어도 언젠가는 발견되지만, 빠른 색인을 원한다면 직접 등록하는 게 낫습니다.


robots.txt — 크롤러에게 "여기는 들어오지 마"

robots.txt는 크롤러에게 접근 허용/제한 영역을 알려주는 파일입니다. 도메인 루트에 위치해야 합니다(yourdomain.com/robots.txt).

User-agent: *
Allow: /

# 관리자 페이지, API 엔드포인트, 로그인 페이지 등은 제외
Disallow: /admin/
Disallow: /api/
Disallow: /_next/

Sitemap: https://yourdomain.com/sitemap.xml

주의할 점이 있습니다. 색인되길 원하는 페이지를 Disallow에 넣으면 절대 안 됩니다. 당연해 보이지만, CMS 이관이나 개발 환경 설정을 잘못하면 프로덕션에서도 전체 사이트가 막혀있는 경우가 종종 있습니다. 새 사이트를 론칭하면 꼭 확인하세요.

이 블로그의 경우, 포트폴리오 카테고리 중 일부는 검색 색인에서 의도적으로 제외했습니다. 특정 클라이언트 작업물은 공개 검색보다는 직접 방문자에게만 보여주는 게 적합했기 때문입니다. SEO와 비즈니스 목적이 항상 일치하지 않을 수 있습니다.


메타 태그 — 검색 결과에 표시되는 '광고판'

검색 결과에서 파란색 제목과 그 아래 설명 텍스트, 보신 적 있으시죠? 그게 메타 태그에서 옵니다.

<title>개발자 블로그 SEO 가이드 | 파란여우</title>
<meta name="description" content="구글에 잘 잡히는 사이트를 만들기 위해 개발자가 직접 챙겨야 할 기술적 SEO 항목들을 실무 중심으로 정리했습니다.">

title 태그: 검색 결과에서 클릭률을 가장 크게 좌우합니다. 50~60자 이내로 페이지 내용을 명확하게 담는 게 좋습니다. 모든 페이지가 같은 제목이면 안 됩니다.

description: 검색 결과에 표시되는 설명입니다. 직접 순위에는 영향을 주지 않지만, 클릭률에는 영향을 줍니다. 150~160자로 요점을 담으세요. 구글이 마음에 들지 않으면 무시하고 본문에서 발췌하기도 합니다.

Next.js에서는 각 페이지 파일에 export const metadata를 선언해서 처리합니다.

// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }) {
  const post = await getPost(params.slug)
  return {
    title: `${post.title} | 파란여우`,
    description: post.description,
    openGraph: {
      title: post.title,
      description: post.description,
      images: [post.thumbnail],
    },
  }
}

OG 태그(Open Graph) 도 함께 챙기세요. 카카오톡이나 SNS에서 링크를 공유할 때 나오는 미리보기 이미지와 제목이 OG 태그에서 나옵니다. SEO 직접 효과는 없지만, 공유가 잘 되면 방문자가 늘고 그게 간접적으로 SEO에 영향을 줍니다.


구조화 데이터 — 검색 결과를 더 풍성하게

구조화 데이터(Structured Data)는 구글에게 "이 페이지는 블로그 포스트야, 작성자는 이 사람이고, 작성일은 이 날짜야"처럼 기계가 읽기 좋은 형식으로 정보를 추가하는 방법입니다. JSON-LD 형식으로 작성합니다.

구조화 데이터를 잘 넣으면 검색 결과에서 리치 스니펫(Rich Snippet) 이라는 추가 정보가 표시될 수 있습니다. 예를 들어 레시피 사이트라면 별점과 요리 시간이, FAQ 페이지라면 질문-답변이 바로 검색 결과에 펼쳐지는 식입니다.

블로그라면 Article 스키마가 기본입니다.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "개발자 블로그 SEO 완전 가이드",
  "author": {
    "@type": "Person",
    "name": "파란여우",
    "url": "https://bluefoxdev.kr"
  },
  "datePublished": "2026-04-08",
  "dateModified": "2026-04-08",
  "description": "구글에 잘 잡히는 사이트를 만드는 방법",
  "image": "https://bluefoxdev.kr/og-image.jpg"
}
</script>

구현 후에는 구글 리치 결과 테스트에서 오류 없이 파싱되는지 확인하면 됩니다.


카노니컬 태그 — 중복 페이지 문제 해결

같은 내용이 여러 URL에서 접근 가능한 경우가 있습니다. 예를 들어 페이지네이션이 있는 목록 페이지, 또는 ?utm_source= 같은 트래킹 파라미터가 붙은 URL들입니다.

구글은 이걸 별개의 페이지로 인식해서 어느 페이지를 원본으로 색인해야 할지 혼란스러워합니다. 이때 카노니컬 태그로 "이 페이지의 원본은 여기야"라고 알려주면 됩니다.

<link rel="canonical" href="https://yourdomain.com/blog/seo-guide" />

Next.js의 metadata 에서는 아래처럼 씁니다.

export const metadata = {
  alternates: {
    canonical: 'https://yourdomain.com/blog/seo-guide',
  },
}

작은 항목처럼 보이지만, 카노니컬이 제대로 안 잡혀 있으면 구글이 SEO 점수를 여러 URL에 분산시켜버립니다.


내부 링크 전략 — 검색 엔진에게 길을 만들어주기

구글 봇은 링크를 따라 사이트를 탐색합니다. 링크가 없는 페이지(고아 페이지)는 발견되지 않을 수 있습니다.

내부 링크를 잘 구성하면 두 가지 효과가 있습니다.

첫째, 크롤링이 원활해집니다. 모든 페이지가 메인 페이지나 목록 페이지에서 링크로 연결되어 있으면, 봇이 빠짐없이 방문할 수 있습니다.

둘째, 페이지 권위(Page Authority)가 전달됩니다. 구글은 링크를 '투표'처럼 봅니다. 많은 페이지에서 링크된 페이지일수록 중요하다고 판단합니다. 내 사이트의 핵심 콘텐츠 페이지로 내부 링크가 많이 모이도록 구성하면, 그 페이지의 검색 순위가 올라갈 수 있습니다.

실제로 블로그를 운영할 때 관련 글끼리 "이 글도 읽어보세요" 형태로 연결하는 것, 그리고 목록 페이지에서 개별 포스트로 제목 링크를 명확히 거는 것만으로도 효과가 있습니다.


Google Search Console 활용법

Search Console은 구글이 내 사이트를 어떻게 보고 있는지 들여다볼 수 있는 무료 도구입니다. SEO에 진지하다면 반드시 연결해야 합니다.

꼭 확인해야 할 메뉴들:

  • 검색 결과 (Performance): 내 사이트가 어떤 검색어로 노출되고, 클릭률은 얼마인지 확인합니다. 노출은 많은데 클릭이 낮은 키워드는 제목/설명 개선의 여지가 있습니다.
  • URL 검사: 특정 페이지가 색인되어 있는지, 어떤 상태인지 확인합니다. 새 글을 올렸을 때 빠른 색인을 요청할 수도 있습니다.
  • 색인 생성 (Indexing): 색인이 안 된 페이지들과 그 이유를 보여줍니다. "크롤링됨 - 현재 색인이 생성되지 않음" 상태가 많으면 사이트 구조나 콘텐츠 품질 문제일 수 있습니다.
  • 코어 웹 바이탈: 실제 방문자 기준 Core Web Vitals 점수입니다.

처음 연결하면 데이터가 쌓이기까지 2~4주 정도 걸립니다. 그 이후부터 의미 있는 데이터를 볼 수 있습니다.


콘텐츠가 기반이다

기술 SEO를 아무리 잘 챙겨도 콘텐츠가 빈약하면 한계가 있습니다. 구글의 검색 품질 평가 기준에서 가장 중요한 것은 E-E-A-T(Experience, Expertise, Authoritativeness, Trustworthiness) 입니다. 직접 경험한 내용, 전문성, 신뢰성을 갖춘 콘텐츠입니다.

개발자 블로그라면 이런 글이 잘 먹힙니다.

  • 실제 개발 과정에서 막혔던 문제와 해결 과정
  • 특정 기술의 장단점을 직접 써본 후 정리한 비교
  • 공식 문서에는 없는 실전 노하우

자동 생성된 것처럼 보이는 얄팍한 글은 구글도 걸러냅니다. 2024년부터 구글은 AI로 대량 생성된 저품질 콘텐츠를 색인에서 적극적으로 걸러내기 시작했습니다.


정리: 지금 당장 할 수 있는 것들

SEO는 단기간에 효과가 나오지 않습니다. 평균적으로 기술적 개선 후 3~6개월이 지나야 순위 변화가 가시화됩니다. 그렇기 때문에 지금 시작하는 게 맞습니다.

오늘 바로 할 수 있는 것:

  1. Google Search Console에 사이트 등록
  2. PageSpeed Insights에서 현재 점수 확인
  3. 사이트맵 생성 및 제출

이번 주 안에 할 것: 4. 모든 페이지의 title, description 메타 태그 점검 5. robots.txt 확인 — 막혀있는 중요 페이지 없는지 체크 6. 이미지에 alt 텍스트 추가

SEO는 한 번 잘 세팅해두면 꾸준히 방문자를 데려오는 '자산'이 됩니다. 광고비를 쓰지 않아도 되는 채널입니다. 개발자라면 기술적인 부분에서 충분히 직접 챙길 수 있습니다. 마케터에게 의존하지 않아도 됩니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.