글을 일곱 편 쓰고 도메인을 붙였다. 다음은 검색에 올리는 일이었다.
정적 사이트는 이 부분이 단순하다. 서버가 하는 일이 없으니 빌드 결과물에 다 들어가 있으면 끝이다. 대신 빠뜨리면 조용히 빠진 채로 남는다.
넣은 것
robots.txt
User-agent: *
Allow: /
Sitemap: https://devtoolstack.bid/sitemap-index.xml
사이트맵 주소를 여기 적어 두면 검색엔진에 등록하지 않아도 크롤러가 찾는다. 등록은 상태를 보려고 하는 것이지, 등록해야만 읽히는 게 아니다.
사이트맵
빌드할 때 자동으로 만들어진다. 열어 보면 두 단이다.
<sitemapindex>
<sitemap><loc>https://devtoolstack.bid/sitemap-0.xml</loc></sitemap>
</sitemapindex>
목차 한 줄짜리라 처음엔 뭔가 빠진 줄 알았다. 아니었다. 한 파일에 45,000개까지 담고 넘으면 쪼개는데, 쪼갤 때 필요한 목차를 미리 만들어 둔 것이다. 지금은 조각이 하나라 한 줄이다.
실제 목록에는 22개가 들어 있다. 글 7편 × 2개 언어 + 홈·히스토리·처리방침·태그 × 2.
개별 태그 페이지는 일부러 뺐다. 글이 한두 개뿐인 태그 페이지는 내용이 얇아 검색 결과에 올라가도 좋을 게 없다. 탐색용으로 쓰되 색인은 막고, 사이트맵에서도 제외했다.
각 글의 머리
<link rel="canonical" href="https://devtoolstack.bid/posts/…/">
<link rel="alternate" hreflang="ko" href="…">
<link rel="alternate" hreflang="en" href="/en/…">
<link rel="alternate" hreflang="x-default" href="…">
canonical은 "이 내용의 정식 주소는 여기"라는 선언이다. 같은 글이 여러 주소로 닿을 수 있을 때 하나로 모아 준다.
hreflang은 한국어판과 영문판이 같은 글의 두 언어임을 알린다. 이게 없으면 둘이 중복 콘텐츠로 취급될 수 있다. x-default는 그 외 언어권에 뭘 보여 줄지 정한다.
틀렸던 것 둘
구조화 데이터의 이미지 주소가 상대 경로였다
검색 결과에 썸네일이 붙게 하는 부분이다.
og:image → https://devtoolstack.bid/media/cover-s7.jpg?v=3a9a9bfe ✅
JSON-LD → /media/cover-s7.jpg?v=3a9a9bfe ⚠️
같은 값인데 한쪽만 절대 주소였다. 레이아웃 쪽에서 절대화해 주는데, 구조화 데이터는 그 전 값을 쓰고 있었다.
구글이 페이지 주소 기준으로 해석해 주긴 하지만 규격은 절대 주소를 요구한다. 어긋나면 썸네일이 안 붙을 수 있다. 한 줄로 감쌌다.
사이트맵 제출에서 막혔다
검색엔진 콘솔에 사이트맵 경로를 넣었더니 "주소가 잘못됨"이 떴다. 주소는 멀쩡했다.
속성 종류 때문이었다.
| 속성 | 입력란 | 넣는 값 |
|---|---|---|
| URL 접두어 | 앞에 도메인이 회색으로 붙어 있음 | 경로만 |
| 도메인 | 접두어 없음 | 전체 주소 |
도메인 속성은 http/https, www 유무, 서브도메인을 다 포함한다. 그래서 어느 주소인지 알 수 없어 전체를 받는다. 입력란 왼쪽에 회색 글자가 있는지 보면 구분된다.
겁먹지 않아도 되는 상태들
등록하고 나면 빨간 글씨가 몇 개 뜨는데, 대부분 정상이다.
"가져올 수 없음" — 제출 직후에 뜬다. 읽어 보고 실패한 게 아니라 아직 안 읽은 것이다. 같은 줄의 "마지막으로 읽은 날짜"가 비어 있으면 그렇다. 다시 제출하면 줄 뒤로 갈 뿐이다.
"리디렉션이 포함된 페이지" — 끝 슬래시가 없는 주소가 슬래시가 있는 주소로 보내지는 것이다. 호스팅의 기본 동작이고, 같은 페이지가 두 주소로 중복 색인되는 걸 막는다. 검색엔진은 출발점을 색인하지 않고 도착점을 색인한다.
/privacy → 308 → /privacy/
/index.html → 308 → /
http://… → 301 → https://…
"크롤링됨 — 현재 색인이 생성되지 않음" — 읽었는데 아직 올릴지 결정을 안 한 상태다. 새 도메인은 거의 항상 거친다. 품질 문제가 아니라 신뢰도가 아직 없는 것이다.
앞으로 할 일은 없다
처음에 궁금했던 것. 글이 늘면 그때마다 다시 제출해야 하나.
아니다. 사이트맵은 빌드할 때마다 다시 만들어지는 동적인 파일이다. 글을 발행하면 재빌드되고 그 안에 새 주소가 들어간다. 검색엔진은 제출받은 주소를 기억해 두고 주기적으로 다시 읽는다.
색인 요청 기능도 있지만 급할 때만 쓰는 것이다. 하루 할당량이 10여 건이라 애초에 매 글마다 쓸 수도 없다. 사이트맵만 있으면 결과는 같고 속도만 다르다.
글을 쓰고 발행하면 끝이다. 반복할 작업은 없다.
