SEO 파헤쳐보기 : 기본적인만큼 놓치기 쉬운 SEO 요소
SEO 파헤쳐보기 : 기본적인만큼 놓치기 쉬운 SEO 요소
서론
구글 검색 센터 웹을 보고 검색엔진에 노출되기 위한 방법 중 URL, a 태그, siteMap, Robot.txt와 같은 기본적인 부분에서 최대한 필요한 내용만을 정리하였습니다.
구글봇이 요구하는 URL, a태그, SiteMap, Robot.txt의 사용방식을 정확하게 알고 싶다면 이 글이 도움이 될 것 같습니다.
포인트 요약
URL
- 상품 상세페이지와 같은 무한한 양의 페이지의 경우 페이지 개수많큼 크롤링하여 서버 과부화를 일으킬 수 있습니다.
Link
- 크롤러는 a태그의 href속성만 접근 가능합니다. onclick 이벤트만 적용하기보다 href를 함께 적용하는 것을 권장합니다.
SiteMap
- 대규모(페이지 1만개 이상?) 웹 사이트가 아니라면 필수요소는 아닙니다.
Robot.txt
- robot.txt가 색인 생성을 방지하지는 못합니다.
크롤러 색인 생성 & 게재 규칙 메타 태그
- noindex를 통해 색인 생성을 방지합니다. robot.txt disallow와 함께 사용한다면 noindex가 무효화될 수 있습니다.
1. URL
색인을 위한 URL 구조
ASCII 문자 혹은 UTF-8 인코딩을 사용합니다.
권장 사항
- 구체적인 단어를 사용
- 잠재고객의 언어를 사용합니다. 독일인이 고객이라면 독일어를 사용
- 필요에 따라 UTF-8 인코딩을 사용
- 국가별 도메인 사용
- gTLD(Generic Top-Level Domain)를 포함하는 국가별 하위 디렉터리를 사
- 하이픈(-)을 사용
- 등호(
=)를 사용하여 키-값 쌍을 구분하고 앰퍼샌드(&)를 사용하여 매개변수를 추가합니다. - 쉼표(
,)를 사용하여 동일한 키의 여러 값을 나열하고, 등호(=)를 사용하여 키-값 쌍을 구분하고, 앰퍼샌드(&)를 사용하여 매개변수를 추가합니다.https://example.com/category?category=dresses&color=purple,pink,salmon&sort=low-to-high&sid=789
권장하지 않는 URL
- ASCII 문자가 아닌 문자 : https://example.com/**🦙✨**
- #(프래그먼트)를 사용 : https://example.com/**#/**potatoes
- 언더바(_)를 사용 : https://example.com/summer_clothing/filter?color_profile=dark_grey
- 단어 통합 : https://example.com/greendress
- 콜론(
:)을 사용하여 키-값 쌍을 구분하고 괄호([ ])를 사용하여 매개변수를 추가합니다. - 쉼표 한 개(
,)를 사용하여 키-값 쌍을 구분하고 쉼표 두 개(,,)를 사용하여 매개변수를 추가합니다.
동적 URL의 문제
여러 개의 매개변수가 포함된 URL이 많아지면 Googlebot이 불필요한 크롤링을 하게 되고, 색인 생성에 문제가 생길 수 있습니다.(서버의 과부화도 생길 수 있습니다.)
원인
아래와 같이 동적은 매개변수로 무한한 페이지가 생성될 수 있습니다. (ex:상세페이지)
예)
📌 해결 방법
- 단순한 URL 구조
- robot.txt 설정
- 일반적으로 검색 결과를 생성하는 URL과 같은 동적 URL이나 캘린더와 같이 무한대의 공간을 만드는 URL을 차단하는 것이 좋습니다.
- robots.txt 파일에 정규 표현식을 사용하면 많은 수의 URL을 손쉽게 차단할 수 있습니다.
- 가능하면 URL에 세션 ID를 사용하지 말고 쿠키를 사용합니다.
- 가능하면 불필요한 매개변수를 삭제하여 URL의 길이를 줄입니다.
- 사이트의 캘린더가 무한대인 경우 동적으로 생성되는 미래의 캘린더 페이지로 연결되는 링크에
nofollow속성을 추가합니다. - 사이트에서 상대적 링크가 깨지지 않았는지 확인합니다.
2. Link
크롤러의 경우 href 속성을 갖고 있는 <a> HTML 요소(앵커 요소)인 경우에만 링크를 크롤링할 수 있습니다.
크롤링을 하지 못하거나 안정적이지 못한 경우
<a>요소에href속성이 없을 경우- 스크립트 이벤트로 인해 링크처럼 작동하는 다른 태그
권장하는 경우
권장 x : 파싱 시도는 할 수 있는 경우
권장 x : Google이 문제를 해결하기 위해 “계속” 시도 할 수 있는 경우
앵커 텍스트 배치
링크에 표시되는 텍스트를 앵커 텍스트라고 합니다. : <a>앵커텍스트</a>
앵커 텍스트의 기본
- 앵커 텍스트는 의미 있는 단어여야 하며 이동할 페이지의 설명이 되어야합니다.
- title 속성은 텍스트가 없는 경우 보완용으로 사용합니다.
- 빈 링크나 의미 없는 자바스크립트 링크는 피해야 합니다.
- 이미지 링크의 경우 적절한 alt 속성 설정
좋은 앵커텍스트 배치 방법
좋은 앵커 텍스트는 키워드를 억지로 넣지 않고, 문맥에 자연스럽게 이어지며 링크의 내용을 명확하게 전달하는 것입니다.
너무 일반적이라 나쁜 앵커 텍스트
<a href="https://example.com">여기를 클릭</a>하여 자세히 알아보세요.<a href="https://example.com">자세히 알아보세요</a><a href="https://example.com">웹사이트</a>에서 당사 치즈에 대해 자세히 알아보세요.- 치즈 제조 방법에 대한 자세한 배경 정보를 제공하는
<a href="https://example.com">도움말</a>을 참고하세요.
좋은 예
- 구매할 수 있는 치즈의 전체 목록을 확인하려면
<a href="https://example.com">치즈 유형 목록</a>을 참고하세요. - 다음 주 화요일부터
<a href="https://example.com">Knitted Cow는 위스콘신 주민들을 재개장 행사에 초대</a>합니다. 또한 소 모양의 얼음 조각을 선착순 20명에게 무료로 제공합니다.
안좋은 예
- 다음 주 화요일부터
<a href="https://example.com">Knitted Cow는 위스콘신 주민들을 재개장 행사에 초대합니다. 또한 소 모양의 얼음 조각을</a>선착순 20명에게 무료로 제공합니다.
3. SiteMap
구글이 어떤 URL로 사이트에 크롤링 할 것인지 알려주는 신호 역할 입니다.
사이트 맵이 없다면?
- 소규모 + 제대로 링크가 연결되어있다면 문제 없음.
사이트맵이 도움이 되는 조건
- 웹사이트가 굉장히 클 경우. → 사이트맵을 통해 수집 우선순위를 정할 수 있음.
- 페이지가 떨어져 있거나 서로 잘 연결이 안되어 있다면.
- 신규 사이트이거나, 빠르게 변하는 콘텐츠가 있을 경우
- ex) 뉴스 웹사이트
사이트맵 크기 제한
- 1개당 50MB, URL 50,000개, 사이트맵 파일은 최대 500개
용량이 부족하다면 여러개의 사이트맵을 만들고 연결하면됩니다.
- 여러 사이트맵을 교차 제출하는 법
https://site-a.com/sitemap.xml
- 여러 사이트를 크롤링하도록 적용.
- 하나의 사이트맵에 다른 사이트맵 여러개를 포함
사이트맵 파일 인코딩 및 위치
- UTF-8
- Search Console을 통해 사이트맵 제출 필요
- 제출하지 않을 경우?
파일이 있는 위치 바로 아래의 경로에만 영향을 줍니다.
ex) /blog/sitemap.xml → /blog/ 에서만 영향을 줍니다.
- 제출하지 않을 경우?
참조 URL의 속성
- 사이트맵에는 Google 검색결과에 보여주고 싶은 URL만 포함하도록 하자.
: 구글은 사이트맵을 보고 어떤 페이지를 중요하게 생각해야 하는지 파악합니다.
- 사이트맵에 어떤 URL을 넣느냐에 따라서 구글이 어떤 걸 표준 URL로 인식할지에 영향을 줄 수 있습니다.
- 모바일과 데스크톱 URL이 다르다면?
- 둘 중 하나만 사이트맵에 넣는게 좋습니다.
- 모두 연결해야한다면?
- 주석을 이용하여 모바일인지, 데스크톱 URL인지 명시하여 알 수 있도록 합니다.
XML 기본 포맷
시작 태그:
요소:
<url>: 각 페이지 정보<loc>: 페이지의 URL (필수)<lastmod>: 마지막 수정일 (선택)<changefreq>: 변경 빈도 (선택)<priority>: 중요도 (선택)
- 참고사항
Google에서는
<priority>및<changefreq>값을 무시합니다.
ex)
URL 작성 규칙
- URL은 반드시 http:// 또는 https://로 시작
- 특수 문자(&, <, >)는 entity escape 처리 필요 → &, < 등
- RFC-3986 기준에 맞게 인코딩
주의사항
- 페이지 변경 시점과 sitemap 생성 시점 구분
검색 엔진은 를 보고 다음과 같이 판단합니다.
- “이 페이지는 최근에 수정됐으니 다시 크롤링해야겠다!”
- 반대로 오래 전에 수정된 페이지는 크롤링 우선순위를 낮게 줄 수 있음
4. Robots.txt
이 파일은 주로 요청으로 인해 사이트가 오버로드되는 것을 방지하기 위해 사용
출처 : https://developers.google.com/search/docs/crawling-indexing/robots/intro?hl=ko
사용 용도와 잘못된 사용
사용 용도 : 웹사이트 오버로드 방지.
잘못된 용도 : 웹사이트 크롤링으로 색인 생성 방지
robots.txt ⇒ 크롤링에서 제외 (페이지가 없는지는 모릅니다.)
만약 크롤러가 색인을 생성하지 않길 원한다면 meta태그를 적용하여야합니다.
사용법
- 형식
- robots.txt는 사이트 루트(https://example.com/robots.txt)에 위치해야 합니다.
- 해당 파일은 같은 도메인과 프로토콜에만 적용됩니다. (예: m.example.com 또는 http에는 미적용)
- 파일은 UTF-8 인코딩이어야 하며, 그렇지 않으면 일부 규칙이 무시될 수 있습니다.
- 작성법
- user-agent : 크롤러 이름을 지정합니다.
- 별표(
*)를 사용하면 이름을 명시적으로 지정해야 하는 여러 AdsBot 크롤러를 제외한 모든 크롤러에 규칙을 적용할 수 있습니다.
- 별표(
- disallow : 사용자 에이전트가 크롤링하지 않도록 하려는 루트 도메인 관련 디렉터리 또는 페이지입니다.
- allow : 이는
disallow규칙을 재정의하여 허용되지 않은 디렉터리에 있는 하위 디렉터리 또는 페이지를 크롤링할 수 있도록 합니다. - sitemap : 사이트의 사이트맵 위치입니다. Google은 http, https, www를 포함하는 URL과 포함하지 않는 대체 URL을 가정하거나 확인하지 않습니다.
- user-agent : 크롤러 이름을 지정합니다.
유용한 규칙
특정 디렉터리 및 콘텐츠 크롤링 금지
특정 디렉터리 내의 모든 파일 및 하위 디렉터리의 크롤링을 금지합니다.
특정 크롤러만 제외하고 나머지 모두 허용
예: Unnecessarybot만 크롤링하지 못하도록 설정하고, 다른 크롤러는 허용합니다.
특정 웹페이지 크롤링 금지
개별 파일이나 경로 하나만 크롤링을 막고 싶을 때 사용합니다.
특정 하위 디렉터리만 허용
전체 사이트는 크롤링 금지하지만, 특정 공개 디렉터리만 허용합니다.
Google 이미지의 특정 이미지 크롤링 차단
특정 이미지 파일에 대해서만 이미지 검색에서 제외합니다.
와일드카드(*)와 정규표현($) 사용 예시
특정 확장자로 끝나는 파일을 모두 차단할 수 있습니다.
Google에서 robots.txt 를 해석하는 방법
Googlebot은 사이트를 크롤링하기 전에 Google 크롤러는 사이트의 robots.txt 파일을 다운로드하고 파싱하여 사이트에서 크롤링할 수 있는 부분에 관한 정보를 추출합니다.( 로봇 제외 프로토콜(REP))
캐싱
- Google은 기본적으로 robots.txt 파일을 하루(24시간) 동안 저장해서 사용합니다.
- 문제가 생기면 더 오래 저장할 수 있습니다.
- 서버가 느려서 시간 초과
- 5xx 오류.
- 이 저장된 캐시은 다른 크롤러도 같이 쓸 수 있습니다.
- 서버 설정(max-age)에 따라 저장 기간이 달라질 수 있습니다. (http 헤더 max-age로 설정이 가능합니다.)
파일 크기 제한
- robot.txt 파일 크기를 최대 500KiB로 제한
5. 크롤러 색인 생성 & 게재 규칙 메타 태그
meta 태그는 검색엔진의 크롤링 및 색인 생성 동작을 제어합니다.
일반 규칙
- all : 제한없음
- noindex : 해당 페이지 색인 생성 제한
- nofollow : 이 페이지의 링크를 따라가지 않습니다.
- none :
noindex,nofollow
스니펫 규칙
- nosnippet : 텍스트 스니펫 또는 동영상 미리보기를 표시하지 않습니다.
- 정적 썸네일 이미지(사용 가능한 경우)는 계속 표시될 수 있습니다.
- max-snippet: [number] : 규칙을 지정하지 않으면 Google에서 스니펫의 길이를 선택합니다.
[number]
0: 검색결과에 스니펫이 표시되지 않음.-1: 스니펫에 표시할 수 있는 문자 수 제한을 제거20: 스니펫에 최대 20자(영문 기준)만 표시되도록 하려면 다음과 같이 입력합니다.
iframe 색인 규칙
- indexifembedded :
noindex와 함께 적용 시iframe과 같은 영역의 경우 색인에 포함합니다.
미리보기 이미지 규칙
- max-image-preview: ****[setting] : 검색결과에 이 페이지가 표시될 때 사용할 미리보기 이미지의 최대 크기를 설정합니다.
[setting]
none: 표시할 미리보기 이미지가 없습니다.standard: 기본 미리보기 이미지가 표시될 수 있습니다.large: 미리보기 이미지가 표시 영역 너비까지 더 크게 표시될 수 있습니다.
미리보기 동영상 규칙
- max-video-preview: [number] : 검색결과에서 이 페이지의 동영상 스니펫에 최대 [number]초를 사용합니다.
[number]
0:max-image-preview설정에 따라 정적 이미지만 사용할 수 있습니다.1: 제한이 없습니다.
기타 규칙
- notranslate : 검색결과에 이 페이지의 번역을 제공하지 않습니다.
- noimageindex : 이 페이지의 이미지를 색인 생성하지 않습니다.
- unavailable_after: [date/time] : 지정된 날짜/시간 후에는 검색결과에 이 페이지를 표시하지 않습니다.
- nopagereadaloud
다양한 Google TTS(텍스트 음성 변환) 서비스에서 TTS(텍스트 음성 변환)를 사용하여 웹페이지를 소리 내어 읽는 것을 방지합니다.
- google-site-verification
Google Search Console에서 사이트 소유권을 인증할 수 있습니다
X-Robots-Tag HTTP 헤더 사용
HTML이 아닌 파일의 색인 생성을 제한하고 싶을 때 유용합니다.
- 위의 규칙과 동일.
출처 :
Link
https://developers.google.com/search/docs/crawling-indexing/links-crawlable?hl=ko
URL
https://developers.google.com/search/docs/crawling-indexing/url-structure?hl=ko
SiteMap
https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview?hl=ko
Robot.txt
https://developers.google.com/search/docs/crawling-indexing/robots/intro?hl=ko
Metadata
https://developers.google.com/search/docs/crawling-indexing/valid-page-metadata?hl=ko

