요새 구글 애드센스를 사용하려면 ads.txt라는 파일을 도메인 루트에 업로드해야 하는 것 같다.
블로그에 광고는 잘 달리고, 큰 문제는 없어 보이지만, 뭔가 오류 메세지가 뜨면 기분이 좋지 않다.
다른 블로거들도 보니 티스토리에서 딱히 지원할 것 같은 느낌은 들지 않고, 직접 해결을 해야할 것 같은 느낌이 들었다.
스킨 단에서 ads.txt를 업로드 해보았지만 image/ads.txt로 가버려 사용이 불가능 했고,,
그러다 구글링을 해보니 DNS 레코드를 변경해서 해결을 보았다는 글을 보게 되었다.
그래서 명색이 코딩 블로거이니, 좀 더 색다른 방법으로 해결을 해보기로 했다.
먼저 구글은 블로그 도메인을 검사하는게 아닌 루트 도메인을 검사하여 ads.txt를 찾는다는 것을 알게 되었다.
다행이 나는 blog.hoto.dev 를 블로그 도메인으로 사용하고 있고, 루트 도메인은 단순히 리다이렉트 용도로 사용하고 있었다.
일단 ads.txt의 모습을 보면 아래와 같다.
google.com, pub-0000000000000000, DIRECT, 0123456789abcdef
subdomain=subdomain.hoto.dev.
애드센스 계정 아이디와 여러 파라메터들
서브도메인이 필요하다면 아래에 subdomain 행을 추가하면 적용이 된다 한다.
일단 이러한 ads.txt를 작성해준 후, DNS 레코드를 서버로 옮겨준다.
먼저 이 방법을 적용하기 위한 조건
1. 루트 도메인을 블로그 도메인으로 사용하고 있지 않아야 한다.
- 지금 상단처럼 루트 도메인은 라우팅 용도 혹은 비어있어야 한다.
- 만약 루트도메인을 블로그 용으로 사용하고 있다면, html을 사용한 방법 대신 아래의 복잡한 방법을 따라해야 한다.
2. 개인 서버 혹은 호스팅이 있어야 한다.
일단 해당 조건을 충족시켰다면 아래처럼 DNS를 변경해주어야 한다.
변경 전 | 변경 후 |
Redirect to blog.hoto.dev | A @ [서버 아이피] |
CNAME blog host.tistory.io. | CNAME blog host.tistory.io. |
굳이 A레코드가 아닌 상황에 알맞은 레코드를 사용하고, 루트 도메인 접속시 서버로만 이어지면 된다.
만약 루트 도메인을 사용하고 있다면 아래처럼 해주길 바란다.
변경 전 | 변경 후 |
CNAME @ host.tistory.io. | A @ [서버 아이피] |
- | CNAME blog host.tistory.io. |
blog 대신 다른 서브도메인을 사용해도 무방하다.
예를 들어 www.[블로그 도메인.com] 이런 서브도메인을 사용하고 싶다면, blog 대신 www를 넣으면 된다.
그리고 서버에서는 ads.txt 파일과 index.html 파일을 올려두면 된다.
<meta http-equiv="refresh" content="0; url=https://blog.hoto.dev/" />
블로그로 리다이렉트 하는 내용이다.
이렇게만 해도 ads.txt 오류는 사라진다.
그러나 이런 야매 방법은 마음에 들지 않고, 좀 더 빠른 리다이렉트와 안정적인 방법을 선호하는 이들을 위해 아래 방법을 소개한다.
다른 방법. Nginx를 사용한 깔끔한 리다이렉트
서버를 잘 다룰줄 아는자 + 웹에대해 약간의 지식을 가지고 있는 사람이라면 Nginx에 대해서 한번쯤 들어봤을 것이다.
아래는 nginx.conf 투척이다.
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name hoto.dev;
ssl_certificate /etc/letsencrypt/ssl/hoto.dev/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/ssl/hoto.dev/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
ssl_prefer_server_ciphers on;
location ^~ /.well-known/acme-challenge {
root /var/www/letsencrypt;
default_type text/plain;
}
location =/ads.txt {
root /var/www/blog;
}
location ~ ^/ {
return 301 $scheme://blog.hoto.dev$request_uri;
}
root "/volume1/hoto_redirect";
index index.html;
}
/var/www/blog 부분에만 ads.txt를 넣어주면 ads.txt 참조시만 서버에 들어오고, 그 이외는 전부 블로그로 보내버린다.
또 let's encrypt로 ssl 발급도 원활하게 작동된다.
혹시 nginx에 echo 모듈이 있다면 가장 깔끔하게 root /var/www/blog 대신에 echo "ads.txt 내용"; 도 가능할것이다.
서버설정을 건들 수 없다면 두번째로 빠른 방법도 있다.
<?php
// index.php 내용
header("Location: https://blog.hoto.dev".$_SERVER['REQUEST_URI']);
?>
이런식으로 한다면 html을 로딩할 필요도 없이 바로 해당 링크로 리다이렉트 한다.
위에 소개한 복잡한 방법은 복잡한 대신, 위에 소개한 html을 이용한 방법보다 장점이 많다.
1. 서버 위치가 외국같은 인터넷이 느린곳일때
- 서버 위치가 한국에서 멀면 당연히 접속 속도도 느려지고, 그에 따라 블로그 접속도 느려진다.
물론 서버 위치가 먼것을 이걸로 전부 커버하기는 무리지만, 위 방법을 쓰면 핸드쉐이크 도중에 리다이렉트가 가능하다.
즉 거의 2초 걸릴꺼 1초도 안되서 가능하다는 것이다. 큰 차이는 아니지만 서버가 멀면 멀수록 더 체감이 커질 것이다.
2. 루트 도메인을 블로그 도메인으로 사용하고 있을때
- 루트 도메인을 블로그 도메인으로 사용하고 있다면 첫번째 방법은 사용하기 어렵다.
이미 구글에 게시글들이 등록되어 있을테고, 첫번째 방법을 사용한다면 블로그 루트로 리다이렉트 되어, 구글로 들어온 사용자들은 게시글을 찾지 못하고 나가게 된다.
그러나 두번째, 세번째 방법을 사용하면 옮긴 도메인 뒤에 uri까지 붙여서 옮겨주기 때문에 불가피하게 도메인을 옮겨도 문제가 없게 된다.
일단 이런식으로 간단하게 소개가 끝났는데, 이렇게 처리를 해주면 간단하게 ads.txt 오류를 없엘 수 있다.
작동방식이 궁금하다면 아래 링크로 테스트를 해보길 바란다.
적용한 방식은 두번째 방식인 nginx 스크립트 방식이다.
ads.txt 링크 : https://hoto.dev/ads.txt
그외의 링크 (현재 게시글) : https://hoto.dev/48
ads.txt를 요청하면 서버의 ads.txt를 불러오지만, 그외의 링크는 전부 https://blog.hoto.dev/$request_uri 로 불러와 지는것을 알 수 있다.
2020/01/31 - [C] - [C++] std::string 앞 뒤에 개행문자 제거
2020/01/31 - [C] - [C++] using namespace std; 를 사용하면 안되는 이유
2020/01/28 - [분류 전체보기] - 티스토리 애드센스 ads.txt 해결 방법
2020/01/27 - [서버 개발일지] - 글 하나로 2일 만에 끝내는 G Suite for Education 등록
2020/01/27 - [C] - Native C로 리듬게임 만들기 #1
2019/05/10 - [PHP] - [Centos 7] PHP 7.3 설치
댓글