결코 GSC 등록만으로 끝나지 않는다!
"사이트의 검색 트래픽 및 실적을 측정하고, 문제를 해결하며, Google 검색결과에서 사이트가 돋보이게 할 수 있습니다 ."
위에서 인용한 것은 구글 검색에서 구글 서치 콘솔을 설명하는 문구이다. 나의 공식 웹사이트인 GenoGlobe.com에 속한 많은 정보가 웹 검색에서 제대로 보이지 않는다는 생각이 오랫동안 들어서 해결책을 찾다가 구글 서치 콘솔(GSC)에 이 웹사이트를 등록하게 되었다. 이 글을 끝까지 읽어보면 알게 되겠지만, GSC 등록이 전부가 아니었다. 사이트 운영자가 공들여 해야 할 일이 생각보다 많았다.
문제의 발단은 이러하다. 챗GPT창에서 내 공식 웹사이트에 속하는 문서의 URL을 주고 열어서 내용을 분석해 보라고 하면, 어떤 문서는 잘 열리지만 어떤 웹문서에 대해서는 다음과 같은 답변을 얻는 일이 많았다.
몇 달 전에 이 문제를 해결해 보려고 무던히 애를 쓴 적이 있었다. 보다 심각하게는 SEO(Search Engine Optimization·검색엔진 최적화) 혹은 단순히 호스팅·Dokuwiki의 설정 문제라고 생각을 했었다. 기술적인 용어로 표현하자면 크롤링이 차단된 것 같다는 느낌이 들었다. 웹브라우저를 통해서는 정상적으로 열리지만, 봇/크롤러는 차단하거나 타임아웃이 발생한다.
이런 문제의 원인은 한 두 가지가 아니다. URL rewriting과 같이 내가 잘 이해하지 못하는 곳까지 들어가면 정말 난감하다. 호스팅 서버의 로그를 보면 아무런 흔적이 없다는 것이 결정적인 단서였다. 회원이 커스터마이즈할 수 없는 최상위 영역에서 챗GPT의 기계적 접속을 막고 있다고 보는 것이 타당하다. 구글 검색창에 site:genoglobe.com(또는 site:genoglobe.com/dokuwiki)를 넣으면 꽤 많은 문서가 인덱싱되어 있음을 알 수 있다. 그러나 모든 문서가 다 있는지는 모른다.
그래서 문제 해결을 위한 첫 접근으로서 DokuWiki 안에서 사이트맵(sitemap.xml)을 만들도록 설정을 바꾸었다. 사이트맵이란 검색 엔진에 URL 구조를 알려주는 XML 형식의 기술적 문서이다. 도쿠위키의 메뉴에서 보이는 사이트맵과는 많이 다르다. 전자는 검색엔진 크롤링을 위한 것, 후자는 '인간 사용자'를 위한 것이다. 두 번째로는 구글 서치 콘솔에도 내 사이트를 등록해 보았다. DNS에 지정된 TXT 레코드를 추가해서 인증을 받는 절차를 거친 뒤 사이트맵을 제출하고 나면 하루쯤 지나고 나서 작동을 개시한다고 한다. 사이트맵 제출이란, "내 사이트의 URL들을 크롤링하고 인덱싱해달라"라는 것을 공식 채널을 통해 전달하는 것이다. 특히 DokuWiki는 페이지가 doku.php?id=...의 형식을 갖기 때문에 구글이 자동으로 발견하기 어려우므로 사이트맵을 만들어 주는 것이 좋다. 나는 URL rewrite를 써서 일반적인 웹주소로 반환하게끔 만들어 놓았지만, 오동작을 하면 구글도 알아보기 힘들 것이다. 반면 이 블로그(blog.genoglobe.com)는 구글 블로그라서 이미 구글 생태계 안에 잘 녹아들어 있기 때문에 별도의 검색엔진최적화따위가 필요하지 않다.
DokuWiki는 기본적으로 자동 사이트맵 URL을 노출하지 않는다. 따라서 웹사이트 운영자가 직접 서치 콘솔에 제출하거나, robots.txt에 정적 사이트맵 경로를 명시해야 한다. 워드프레스와 같은 CMS에서는 기본적으로 sitemap.xml을 자동 생성한다.
그런데 여기에서 놓치기 쉬운 사실이 있다. 구글은 '사이트맵을 만들어 줘'는 절대 요구하지 않는다고 한다. '작동을 개시'한다는 것을 너무 믿지 말아야 한다. 숟가락에 음식을 적당한 크기로 잘 떠서 입 근처까지 가져다 주면 먹겠다는 뜻이다.
- 사이트맵은 운영자가 직접 만들어야 한다(cron을 쓰거나, 또는 ~/doku.php?do=sitemap이라고 웹브라우저에서 입력함으로써 이루어진다).
- 그 다음에 웹브라우저가 볼 수 있는 위치에 두고, 이 위치 정보를 robots.txt에 기록한다. 이 파일은 구글이 아닌 다른 로봇에게도 유용한 정보를 준다.
모든 과정을 알기 쉽게 설명하면 다음과 같다. 이는 챗GPT가 생성한 값진 정보이다. 빨간색으로 표시한 비밀키 생성 팁을 보고 정말 놀라고 감동하였다. 사실 불특정 다수가 URL을 통해서 사이트맵을 마구 만들면 곤란하지 않겠는가! 내가 이용하는 호스팅 서비스가 SSH을 지원하는지 기억이 잘 나지 않는다. SSH를 지원하지 않는 약간 저렴한 서비스로 옮겼었든가? SSH를 쓰지 못하더라도, 웹으로 접속하여 제어판에서 전부 해결할 수 있어서 다행이었다.
DokuWiki 사이트를 Google에 제대로 노출시키기
이 글은 Hostinger 공유 호스팅 환경에서 DokuWiki를 운영하면서,
SSH 없이도 사이트맵(sitemap.xml.gz)을 자동 생성하고,
Google Search Console + robots.txt와 연동하여
검색 노출을 안정적으로 운영하는 전체 과정을 정리한 것입니다.
홈 디렉토리는 예시로 /home/u123456789 라고 가정합니다.
도메인은 https://example.com 으로 예시를 들며,
실제 환경에서는 자신의 도메인으로 바꾸면 됩니다.
전체 목표
- DokuWiki의 사이트맵(
sitemap.xml.gz)을 주기적으로 생성한다.
- 생성된 사이트맵을
public_html 최상위에서 제공한다.
예: https://example.com/sitemap.xml.gz
robots.txt 와 Google Search Console에 사이트맵 URL을 등록한다.
- 크론 작업은 Hostinger hPanel에서 설정하고, 보안을 위해 웹에서 직접 실행될 때는 비밀 키를 요구하도록 한다.
1. 디렉토리 구조 가정
기본 구조는 다음과 같이 가정합니다.
/home/u123456789/
└── public_html/
├── index.php
├── robots.txt (나중에 생성)
├── sitemap.xml.gz (나중에 자동 생성/복사)
└── dokuwiki/
├── doku.php
├── bin/
│ └── indexer.php
└── data/
└── cache/
└── sitemap.xml.gz (DokuWiki가 생성하는 원본)
2. cron_sitemap.php 생성 (사이트맵 생성 + 복사 + 보안)
먼저 public_html 아래에 cron_sitemap.php 파일을 하나 만듭니다.
경로:
/home/u123456789/public_html/cron_sitemap.php
파일 내용 예시:
<?php
// 설정 부분 --------------------------------------------------------
// DokuWiki 설치 경로
$docroot = '/home/u123456789/public_html/dokuwiki';
// PHP CLI 경로 (Hostinger에서 보통 /usr/bin/php 인 경우가 많음)
$php = '/usr/bin/php';
// 보안용 비밀 키 (임의의 문자열로 바꾸세요)
$secret_key = 'MY_SUPER_SECRET_KEY_12345';
// ------------------------------------------------------------------
// 1) 웹에서 직접 실행될 때는 비밀 키 확인
if (php_sapi_name() !== 'cli') {
if (!isset($_GET['key']) || $_GET['key'] !== $secret_key) {
http_response_code(403);
echo "Forbidden";
exit;
}
}
// 2) DokuWiki 사이트맵 생성 (bin/indexer.php -s 실행)
$indexer = $docroot . '/bin/indexer.php';
// exec() 사용 시 에러 메시지 확인을 위해 2>&1 추가 가능
$cmd = $php . ' ' . escapeshellarg($indexer) . ' -s 2>&1';
$output = [];
$return_var = 0;
exec($cmd, $output, $return_var);
// 필요하면 로그 확인용 출력 (크론에서는 무시됨)
if ($return_var !== 0) {
// echo "Indexer error:\n" . implode("\n", $output);
// 여기서는 조용히 진행
}
// 3) 생성된 sitemap.xml.gz 경로
$src = $docroot . '/data/cache/sitemap.xml.gz';
$dst = '/home/u123456789/public_html/sitemap.xml.gz';
if (file_exists($src)) {
if (!@copy($src, $dst)) {
// 권한 문제 등으로 실패할 수 있음
// echo "Failed to copy sitemap.\n";
}
} else {
// echo "Source sitemap not found.\n";
}
?>
이 스크립트는 두 가지 방식으로 동작하도록 설계되어 있습니다.
- CLI(크론)에서 실행:
php cron_sitemap.php 로 실행하면 비밀 키 체크 없이 바로 동작합니다.
- 웹에서 테스트 실행: 브라우저에서
https://example.com/cron_sitemap.php?key=MY_SUPER_SECRET_KEY_12345
처럼 접속했을 때만 동작하고, 키가 없으면 403 Forbidden 으로 막습니다.
3. Hostinger hPanel에서 크론 작업(Cron Job) 설정
이제 이 PHP 스크립트를 주기적으로 자동 실행하게 만듭니다.
3-1. 크론 실행 주기
예시: 매일 새벽 3시에 한 번 실행
- Minute:
0
- Hour:
3
- Day:
*
- Month:
*
- Weekday:
*
3-2. 실행 명령
Hostinger의 Cron Jobs에서 “Command” 또는 “PHP Script” 실행 방식을 고를 수 있습니다.
① Command 방식 예시
다음과 같이 입력합니다.
/usr/bin/php /home/u123456789/public_html/cron_sitemap.php
② PHP Script 선택 방식 예시
만약 “PHP Script” 항목에 경로만 적는 UI라면:
/home/u123456789/public_html/cron_sitemap.php
둘 중 환경에 맞는 방식을 선택하면 됩니다.
4. 크론/스크립트가 제대로 동작하는지 테스트하기
- 브라우저에서 다음 주소를 한 번 열어봅니다.
https://example.com/cron_sitemap.php?key=MY_SUPER_SECRET_KEY_12345
- 에러가 없다면, 이제 다음 파일이 존재하는지 확인합니다.
/home/u123456789/public_html/sitemap.xml.gz
- 또는 브라우저에서 직접:
https://example.com/sitemap.xml.gz
를 열어보고 gzip 압축 XML 파일이 다운로드되면 성공입니다.
이제부터는 크론이 매일 새벽에 같은 작업을 자동으로 실행해 줍니다.
5. robots.txt에 사이트맵 등록
검색엔진이 사이트맵 위치를 자동으로 알 수 있도록,
robots.txt 파일에 사이트맵 URL을 등록합니다.
경로:
/home/u123456789/public_html/robots.txt
내용 예시:
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml.gz
이렇게 하면 Google뿐 아니라 다른 검색 엔진들도
https://example.com/sitemap.xml.gz 를 사이트맵으로 인식하게 됩니다.
6. Google Search Console에 사이트맵 URL 등록
- Google Search Console에 로그인합니다.
- 속성(Property)에 자신의 사이트(예:
https://example.com)를 선택합니다.
- 왼쪽 메뉴에서 “Sitemaps”를 클릭합니다.
- “새 사이트맵 추가” 입력창에 다음을 입력합니다.
https://example.com/sitemap.xml.gz
- 제출(Submit) 버튼을 누릅니다.
제출이 성공하면, Search Console에서
“마지막 읽은 날짜”, “처리 상태”, “인덱싱된 URL 수” 등을 확인할 수 있습니다.
중요: 사이트맵 URL 제출은 한 번만 하면 됩니다.
이후 사이트맵 파일이 갱신될 때마다 Googlebot이 주기적으로 다시 요청하여 최신 상태를 반영합니다.
7. 왜 이렇게까지 해야 하나?
- DokuWiki는 워드프레스처럼 자동 사이트맵 제공/갱신이 기본 내장되어 있지 않습니다.
doku.php?do=sitemap 은 관리자용 “생성 트리거”에 가깝고,
검색엔진이 직접 호출해서 쓰는 URL이 아닙니다.
- 검색엔진은 정적 사이트맵 파일(예:
sitemap.xml, sitemap.xml.gz)과
robots.txt 또는 Search Console에서 알려준 URL만 신뢰합니다.
- 따라서:
1) DokuWiki 내부에서 sitemap.xml.gz를 생성하고
2) 웹에서 접근 가능한 위치로 복사하고
3) 그 위치를 robots.txt + GSC에 알려주는 구조가 필요합니다.
- 이 과정을 크론으로 자동화하면, 이후에는 위키 문서를 수정/추가하는 것만 관리하면 되고,
검색 노출은 자동으로 갱신됩니다.
8. 보안 측면 정리
cron_sitemap.php는 서버 내부에서 크론으로 실행될 때는
php_sapi_name() === 'cli' 이므로 비밀 키 확인 없이 동작합니다.
- 웹에서 누군가가
cron_sitemap.php를 직접 호출하려고 하면,
반드시 ?key=MY_SUPER_SECRET_KEY_12345 값을 맞춰야 실행됩니다.
- 키가 없거나 틀리면
403 Forbidden 응답을 반환하여
외부에서 마음대로 사이트맵 생성/복사를 시도할 수 없습니다.
- 추가로, 나중에 필요 없다고 판단되면 이 파일 이름 자체를 바꾸거나,
방화벽/접근제어로 더 제한을 걸 수도 있습니다.
마무리
요약하면, SSH 없이도 Hostinger + DokuWiki 환경에서
다음 네 가지 요소만 맞춰 주면 됩니다.
cron_sitemap.php – 사이트맵 생성 및 복사, 보안 키 포함
- Cron Job – 매일/매주 PHP 스크립트 자동 실행
robots.txt – 검색엔진에게 사이트맵 위치 안내
- Google Search Console – 사이트맵 URL 1회 제출 및 상태 모니터링
이렇게 세팅해 두면, 위키 문서만 잘 작성해도
검색엔진 인덱싱과 노출은 상당 부분 자동으로 따라오게 됩니다. 여기까지