1단계 — 기반: 모든 사이트가 가장 먼저 필요로 하는 기술 토대
출처: Dev.to
원본은 thatdevpro.com에 게재되었습니다. 이 글은 ThatDevPro의 14‑tier 엔진 최적화 스택 중 하나인 Tier 1 — Foundation(모든 사이트가 반드시 갖춰야 할 기술적 기반) 에 해당합니다. ThatDevPro는 SDVOSB 인증을 받은 베테랑 소유 웹 + AI 엔지니어링 스튜디오입니다. 현재 보고 계신 Dev.to 재게시본이며, 정식 원본은 ThatDevPro.com에 있습니다. AI‑citation 소스 레포는 github.com/Janady13/aio-surfaces 입니다.
Tier 설명: 협상 불가능한 기술적 기반. 모든 페이지, 서버 설정, CMS에 이 항목들을 다른 티어를 건드리기 전에 먼저 구현합니다. 항목은 다섯 개의 서브‑클러스터로 묶여 있어 감사(Audit) 시 체크리스트가 아니라 프레임워크 형태로 읽히게 됩니다.
이 티어는 /Framework/ 라이브러리 안에 있는 다음 프레임워크 문서들을 구현합니다. 자세한 구현 패턴, 감사 루브릭, 정식 레퍼런스는 해당 문서를 참고하세요.
framework-technicalseo.md— 크롤링 가능성, 인덱싱, 정규화, 리다이렉트, URL 구조framework-schema.md— JSON‑LD, @id 그래프 패턴, Organization/Person/WebSite/BreadcrumbListframework-pageexperience.md— Core Web Vitals(LCP, INP, CLS), 모바일 사용성, HTTPSframework-internallinking.md— Hub‑and‑spoke 아키텍처, 앵커 텍스트, 크롤 깊이framework-mobileseo.md— Mobile‑first 인덱싱, 모바일 사용성framework-security.md— 보안 헤더, HSTS, 전반적인 보안 자세
-
WordPress 퍼머링크를
/%postname%/로 설정하고, Next.js에서는 파일 기반 라우팅을 사용하되 Trailing‑slash 정책을 일관되게 적용합니다(하나 선택하고 사이트 전체에 고수). -
모든 페이지에
<link rel="canonical" href="self‑referencing‑URL">를 추가합니다(정규화 페이지에 한함). -
인덱싱 가능한 페이지에
<meta name="robots" content="index, follow">를 삽입합니다. -
.htaccess또는nginx.conf에서 소문자 URL 로 강제 변환해 대소문자 중복 인덱싱을 방지합니다. -
www/non‑www와http/https를 단일 301 리다이렉트 로 해결합니다(체인 없이 한 번만). -
GSC에서 표시된 얇은 페이지, 중복 페이지, 고아 페이지를 301 또는 410 으로 처리합니다.
-
검증: Screaming Frog 크롤링 결과 중복된 canonical, 리다이렉트 체인, 혼합 대소문자 URL이 0건이어야 합니다.
-
모든 페이지는 홈페이지에서 최대 3번 클릭 이내에 도달하도록 제한합니다( Sitebulb의 Crawl Depth 보고서로 확인).
-
비홈페이지 템플릿마다 BreadcrumbList JSON‑LD가 포함된 브레드크럼 내비게이션을 추가합니다.
-
최상위 섹션과 주요 페이지를 모두 나열한 공개
/sitemap.html을 구축합니다. -
Hub‑and‑spoke 토픽 클러스터 구현: 피러 페이지가 5 ~ 15개의 서브 페이지에 링크하고, 각 서브 페이지가 다시 피러 페이지에 링크합니다.
-
내부 링크에 설명적인 앵커 텍스트 사용(“click here”, “read more” 등은 금지, 문맥이 있는 텍스트 사용).
-
URL 슬러그는 60자 이하, 불용어 없이, 하이픈만 사용합니다.
-
검증: 크롤 깊이 보고서에서 깊이 3을 초과하는 페이지가 0건이어야 하며, 브레드크럼은 Rich Results Test에서 통과해야 합니다.
-
각 페이지마다 고유한
<title>태그를 50 ~ 60자 길이로, 주요 키워드를 앞쪽에 배치해 작성합니다. -
각 페이지마다 고유한
<meta name="description">를 140 ~ 160자 길이로, 능동형 어조와 CTA를 포함해 작성합니다. -
완전한 Open Graph 세트 추가:
og:title,og:description,og:image(1200×630),og:type,og:url -
Twitter Card 태그 추가:
twitter:card="summary_large_image",twitter:title,twitter:description,twitter:image -
모바일 브라우저 크롬에 맞는 브랜드 색상을 매치시킵니다.
-
언어 신호를 위해
<meta name="language">와<html lang="...">를 삽입합니다. -
검증: 모든 URL을
metatags.io와OpenGraph.xyz로 검사하고, 스크린샷이 기대 프리뷰와 일치하는지 확인합니다. -
모든 페이지
<head>에 Organization 및 WebSite JSON‑LD 를 삽입하고,SearchAction을 이용해 사이트링크 검색을 지원합니다. -
물리적 주소가 있는 비즈니스는 LocalBusiness 스키마에 전체 NAP, 영업시간, 지리 좌표,
areaServed를 포함합니다. -
기사 페이지에는 Article + Author(Person) +
datePublished+dateModifiedJSON‑LD 를 추가합니다. -
서비스 페이지에는 Service 스키마에 제공자,
areaServed,hasOfferCatalog를 포함합니다. -
FAQ 섹션이 실제 질문에 답변할 경우에만 FAQPage JSON‑LD 를 삽입합니다.
-
모든
@id값에 절대 URL 을 사용해 스키마 간 교차 연결을 가능하게 합니다. -
검증: 모든 페이지가 Google Rich Results Test와 Schema.org Validator를 통과하고 오류가 0이어야 합니다.
-
Yoast, Rank Math 혹은 프레임워크 플러그인(Next.js:
next-sitemap)을 이용해 동적 XML 사이트맵을 활성화합니다. -
콘텐츠 편집 시마다 사이트맵이 업데이트 되도록 설정하고, 발행 시에만이 아니라 편집 시에도 반영합니다.
-
URL 수가 50,000개 또는 파일 크기가 50 MB를 초과하면 사이트맵 인덱스로 분할합니다.
-
noindex페이지, 리다이렉트, 파라미터 URL은 사이트맵에서 제외합니다. -
필요 시 이미지 사이트맵과 비디오 사이트맵을 별도로 추가합니다.
-
Google Search Console과 Bing Webmaster Tools에 사이트맵 URL을 제출합니다.
-
검증: 사이트맵이 HTTP 200을 반환하고 XML 형식이 정상이며, 나열된 모든 URL이 인덱싱 가능해야 합니다.
-
루트에 정확히 다음과 같은 robots.txt 를 생성합니다:
User-agent: * Allow: / Disallow: /wp-admin/ Disallow: /staging/ Disallow: /*?*sessionid= Sitemap: https://yourdomain.com/sitemap.xml -
User-agent: GPTBot,User-agent: ClaudeBot,User-agent: PerplexityBot규칙을 명시적으로 추가하고(허용/차단은 클라이언트 요구에 따라) -
알려진 스크래퍼 봇(SemrushBot, AhrefsBot)은 클라이언트 요청 시에만 차단하고 기본값은 차단하지 않습니다.
-
CSS, JS, 이미지 디렉터리는 절대 차단하지 않으며, Google이 페이지를 렌더링하는 데 필요합니다.
-
배포 전 Google Search Console의 robots.txt 테스터 로 검증합니다.
-
검증:
yourdomain.com/robots.txt가 HTTP 200 텍스트를 반환하고, GSC 테스터에서 중요한 리소스가 차단되지 않아야 합니다. -
301 리다이렉트는 서버 설정(.htaccess, nginx, Cloudflare Rules) 을 통해서만 추가하고, JavaScript나 meta refresh는 절대 사용하지 않습니다.
-
리다이렉트 체인을 제거하고, 모든 리다이렉트가 최종 URL로 바로 연결되도록 합니다.
-
GSC Coverage 보고서에 나타난 404 오류는 가장 관련성 높은 살아있는 URL로 301 이동하거나, 의도적으로 사라진 경우 410 을 반환합니다.
-
302는 진정한 임시 리다이렉트(A/B 테스트, 시즌 페이지)일 때만 사용합니다.
-
사이트 마이그레이션이나 구조 재조정 시 리다이렉트 매핑 스프레드시트를 유지합니다.
-
검증: Screaming Frog가 리다이렉트 체인 0건, 영구 이동에 302 사용 0건, 사이트맵 내 4xx 오류 0