9/9 오전에 서비스 주소를 www.aboutfishing.kr 하나로 통합합니다.
지금 aboutfishing.kr(www 없는 주소)로 들어오는 유입을 www로 넘겨야 하는데,
전달받은 index.html은 booking.aboutfishing.kr로 보내도록 되어 있습니다.
아래 순서대로 봐주시면 됩니다.
index.html은 <meta http-equiv="refresh">로 booking으로 보내는 한 장짜리 파일인데,
9/8 현재 https://aboutfishing.kr/을 실제로 열면 refresh 태그가 없는 예전 랜딩 페이지가 응답합니다.
apex에 배포물이 두 벌 있거나, 전달받은 파일이 지금 서빙되지 않는 구버전입니다.
어느 vhost·버킷·배포가 apex를 서빙하는지부터 확정해야 이후 작업이 의미가 있습니다.
근거는 네이버 사이트 검증 코드가 셋 다 다르다는 점입니다. 같은 사이트라면 이렇게 갈릴 수 없습니다.
| 위치 | naver-site-verification 값 | canonical | og:image |
|---|---|---|---|
| 실제 응답 (aboutfishing.kr) | 58e0552c06b3…c2a1b | https://aboutfishing.kr/ | /images/logo_og.png |
| 전달받은 index.html | 3d586b009b13…1d244f | 없음 | image.aboutfishing.kr/static/favicon/og-image.jpg |
| www.aboutfishing.kr | 396e6d3a52e2…f65f0941 | https://www.aboutfishing.kr/ | /og/og-default.jpg |
확인 부탁드릴 것 두 가지입니다.
index.html이 그중 어디에 있는 파일인지/images/, /static/ 같은 하위 경로 자산이 실제로 붙어 있는지 (있으면 리다이렉트 규칙에서 다뤄야 합니다)| 항목 | 요구사항 |
|---|---|
| 대상 | aboutfishing.kr 및 www가 아닌 모든 호스트 → https://www.aboutfishing.kr |
| 상태코드 | 301 Permanent. 302는 검색엔진이 주소 이전으로 취급하지 않으므로 쓰지 않습니다 |
| 보존 | 경로 + 쿼리스트링 + 해시를 그대로 붙여서 넘깁니다. 루트로 몰지 않습니다 |
| 프로토콜 | http://로 들어온 것도 같은 규칙으로 https://www…까지 한 번에 |
| 예외 경로 | /.well-known/ 이하는 리다이렉트하지 않고 apex에서 그대로 응답 (인증서 갱신, 앱 링크 검증 파일) |
| 적용 시점 | 9/9(수) 오전 www 전환과 동시. 그 전에 걸면 아직 노출되면 안 되는 화면이 색인됩니다 |
루트로 몰아버리면 아래가 전부 유실됩니다.
?event=knto — 한국관광공사 「여행가는 달」 캠페인 랜딩. 10/1 오픈이고 공사 제출 URL에 들어가 있습니다?utm_source=… — 유입 경로 구분이 통째로 사라져 GA4에서 direct로 잡힙니다?gclid=… / ?fbclid=… — 구글·메타 광고 전환이 계정에 안 붙습니다. 9월 광고비 기준으로 월 3,353만원이 걸려 있는 지표입니다HTML 파일을 고치는 것보다 이쪽이 맞습니다. meta refresh나 JS 리다이렉트가 못 넘기는 것이 세 가지 있습니다.
| 못 넘기는 것 | 결과 |
|---|---|
| 검색 신호 | apex가 색인에서 안 빠지고 www와 중복 색인 상태가 유지됩니다. 9/8 현재 두 주소 모두 index, follow입니다 |
| 공유 미리보기 | 카카오톡·네이버·슬랙 크롤러는 리다이렉트 전 페이지의 og를 읽습니다. apex 카드가 그대로 나갑니다 |
| 광고 심사 | 네이버 검색광고는 연결 URL이 리다이렉트 페이지면 재검수 대상이 됩니다 |
대시보드에서 해당 존 → Rules → Redirect Rules → Create rule.
[When incoming requests match]
Custom filter expression
(http.host eq "aboutfishing.kr") and not starts_with(http.request.uri.path, "/.well-known/")
[Then]
Type : Dynamic
Expression : concat("https://www.aboutfishing.kr", http.request.uri.path,
http.request.uri.query ne "" ? concat("?", http.request.uri.query) : "")
Status code : 301
Preserve query string : (Dynamic 식에서 직접 붙이므로 체크 해제)
server {
listen 443 ssl http2;
server_name aboutfishing.kr;
# 인증서 갱신·앱 링크 검증 파일은 리다이렉트하지 않는다
location ^~ /.well-known/ {
root /var/www/apex;
try_files $uri =404;
}
location / {
return 301 https://www.aboutfishing.kr$request_uri;
}
}
server {
listen 80;
server_name aboutfishing.kr www.aboutfishing.kr;
location ^~ /.well-known/ { root /var/www/apex; try_files $uri =404; }
location / { return 301 https://www.aboutfishing.kr$request_uri; }
}
$request_uri는 경로와 쿼리를 모두 포함합니다. 뒤에 /나 $uri를 덧붙이면 안 됩니다.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^aboutfishing\.kr$ [NC]
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteRule ^(.*)$ https://www.aboutfishing.kr/$1 [R=301,L,QSA]
서버 설정을 못 건드리는 상황이면 apex 루트의 index.html을 아래로 교체합니다.
어디까지나 임시이고, 301로 옮길 때까지만 씁니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황</title>
<link rel="canonical" href="https://www.aboutfishing.kr/">
<meta name="apple-mobile-web-app-title" content="어바웃피싱 – about fishing">
<meta name="robots" content="index, follow, max-image-preview:large">
<meta name="description" content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="어바웃피싱">
<meta property="og:locale" content="ko_KR">
<meta property="og:title" content="어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황">
<meta property="og:url" content="https://www.aboutfishing.kr/">
<meta property="og:image" content="https://www.aboutfishing.kr/og/og-default.jpg">
<meta property="og:description" content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황">
<meta name="twitter:url" content="https://www.aboutfishing.kr/">
<meta name="twitter:image" content="https://www.aboutfishing.kr/og/og-default.jpg">
<meta name="twitter:description" content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요.">
<meta name="naver-site-verification" content="58e0552c06b379fb692bfaf39094e438919c2a1b">
<script>
(function () {
location.replace('https://www.aboutfishing.kr'
+ location.pathname + location.search + location.hash);
})();
</script>
<noscript><meta http-equiv="refresh" content="0;URL='https://www.aboutfishing.kr/'"></noscript>
</head>
<body>
<p>어바웃피싱 주소가 <a href="https://www.aboutfishing.kr/">www.aboutfishing.kr</a>로 바뀌었습니다.
자동으로 이동하지 않으면 링크를 눌러주세요.</p>
</body>
</html>
meta refresh는 noscript로 내리고 실제 이동은 JS가 처리합니다.
색인은 canonical이 www를 가리켜 통합됩니다.
naver-site-verification 값은 현재 apex가 실제로 응답하는 코드(58e0552c…)를 그대로 유지했습니다.
0번에서 서빙 배포물이 다른 것으로 확인되면 그쪽 코드로 맞춰주세요.
「고칠 것」 칸은 파일에 그대로 넣는 값입니다.
| # | 지금 값 | 고칠 값 (그대로 입력) | 이유 |
|---|---|---|---|
| 1 | <meta http-equiv="refresh" content="0;URL='https://booking.aboutfishing.kr/'" /> |
<noscript><meta http-equiv="refresh" content="0;URL='https://www.aboutfishing.kr/'"></noscript> |
이대로 두면 9/9 이후에도 apex 유입이 전부 https://booking.aboutfishing.kr/ 로 갑니다 |
| 2 | 목적지가 https://booking.aboutfishing.kr/ 루트로 고정 |
location.replace('https://www.aboutfishing.kr' + location.pathname + location.search + location.hash); |
https://aboutfishing.kr/?event=knto 가 https://www.aboutfishing.kr/?event=knto 로 가야 합니다. utm·gclid도 같습니다 |
| 3 | canonical 태그 없음 | <link rel="canonical" href="https://www.aboutfishing.kr/"> |
https://aboutfishing.kr/ 와 https://www.aboutfishing.kr/ 의 동시 색인 해소 |
| 4 | <meta property="og:url" content="https://aboutfishing.kr"><meta name="twitter:url" content="https://aboutfishing.kr"> |
<meta property="og:url" content="https://www.aboutfishing.kr/"><meta name="twitter:url" content="https://www.aboutfishing.kr/"> |
공유 카드가 https://aboutfishing.kr 를 가리킵니다 |
| 5 | description·og:description·twitter:title·twitter:description 의 content 가 빈 문자열 |
content="전국 선상낚시·배낚시를 실시간으로 예약하고 최신 조황, 낚시터·낚시 포인트 정보를 어바웃피싱에서 한번에 확인하세요."( twitter:title 은 content="어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황") |
카카오톡 공유 시 설명이 빈 칸으로 나갑니다. 값은 https://www.aboutfishing.kr/ 에 현재 들어 있는 문구를 그대로 가져왔습니다 |
| 6 | <meta property="og:image" content="https://image.aboutfishing.kr/static/favicon/og-image.jpg"><meta name="twitter:image" content="https://image.aboutfishing.kr/static/favicon/og-image.jpg"> |
<meta property="og:image" content="https://www.aboutfishing.kr/og/og-default.jpg"><meta name="twitter:image" content="https://www.aboutfishing.kr/og/og-default.jpg"> |
https://www.aboutfishing.kr/ 가 쓰는 이미지와 다릅니다 |
| 7 | <meta name="twitter:card" content="summary"> |
<meta name="twitter:card" content="summary_large_image"> |
https://www.aboutfishing.kr/ 와 불일치 |
| 8 | og:type·og:site_name·og:locale 태그 자체가 없음 |
<meta property="og:type" content="website"><meta property="og:site_name" content="어바웃피싱"><meta property="og:locale" content="ko_KR"> |
https://www.aboutfishing.kr/ 에는 세 개 다 있습니다 |
| 9 | <html lang="en"> |
<html lang="ko"> |
— |
| 10 | <meta name="robots" content="index,nofollow"/> |
<meta name="robots" content="index, follow, max-image-preview:large"> |
nofollow 는 의미가 없고 canonical 통합을 방해합니다. 값은 https://www.aboutfishing.kr/ 과 동일하게 맞췄습니다 |
| 11 | <body> 자체가 없음 (</head> 다음 바로 </html>) |
<body><p>어바웃피싱 주소가 <a href="https://www.aboutfishing.kr/">www.aboutfishing.kr</a>로 바뀌었습니다. 자동으로 이동하지 않으면 링크를 눌러주세요.</p></body> |
refresh가 막히는 인앱 브라우저에서 백지로 뜹니다 |
| 12 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
줄 삭제 | 지금은 무의미합니다 |
| 13 | <meta name="viewport" content="width=device-width"> |
<meta name="viewport" content="width=device-width, initial-scale=1"> |
— |
| 14 | <meta name="naver-site-verification" content="3d586b009b13e0ef4d5ab528530ea96fcd1d244f" /> |
<meta name="naver-site-verification" content="58e0552c06b379fb692bfaf39094e438919c2a1b"> |
9/8 현재 https://aboutfishing.kr/ 가 실제로 응답하는 값은 58e0552c… 입니다. 0번에서 서빙 배포물이 다른 것으로 확인되면 그쪽 값으로 맞춰주세요 |
| 15 | <title> 태그 없음 |
<title>어바웃피싱 | 전국 선상낚시·배낚시 예약과 실시간 조황</title> |
공유 카드와 검색 결과의 제목이 비어 있습니다 |
리다이렉트만 걸고 아래를 안 하면 9/9에 앱 링크와 결제가 깨집니다.
| 항목 | 9/8 현재 상태 | 해야 할 것 | 담당 |
|---|---|---|---|
| P0앱 링크 검증 파일 | www의 /.well-known/apple-app-site-association과 /.well-known/assetlinks.json 둘 다 404. apex·booking도 404 |
www 루트에 두 파일 게시. AASA는 확장자 없이 Content-Type: application/json, 리다이렉트 없이 200 |
인프라 + 앱 |
| P0인증서 | 미확인 | 인증서 SAN에 aboutfishing.kr과 www.aboutfishing.kr이 모두 들어 있는지. apex가 인증서 오류를 내면 브라우저가 301에 닿기 전에 막힙니다 |
인프라 |
| P0토스 PG | 미확인 | 등록 도메인·successUrl·failUrl·웹훅 수신 주소를 www 기준으로 변경 | 인프라 + 결제 |
| 지도·CCTV API 키 | 미확인 | 키의 허용 도메인 목록에 www.aboutfishing.kr 추가. 빠지면 지도가 통째로 안 뜹니다 |
인프라 |
| 플레어레인 | 미확인 | 허용 도메인에 www 추가 | 인프라 |
| 네이버 서치어드바이저 | apex·www가 서로 다른 코드로 각각 등록 | 301을 걸면 apex의 HTML 태그 검증이 더 이상 읽히지 않습니다. apex 소유확인을 DNS TXT로 옮기거나, apex 사이트를 www로 통합 | 마케팅 |
| HSTS | 미확인 | apex에 HSTS가 걸려 있으면 www에도 같은 설정. includeSubDomains 여부 확인 |
인프라 |
적용 직후 아래를 그대로 실행해서 결과를 공유해주시면 됩니다.
curl -sI "https://aboutfishing.kr/" | head -5
# 기대: HTTP/2 301 / location: https://www.aboutfishing.kr/
curl -sI "https://aboutfishing.kr/?event=knto" | grep -i location
# 기대: location: https://www.aboutfishing.kr/?event=knto
curl -sI "https://aboutfishing.kr/map/?utm_source=naver&utm_medium=cpc" | grep -i location
# 기대: location: https://www.aboutfishing.kr/map/?utm_source=naver&utm_medium=cpc
curl -sI "http://aboutfishing.kr/" | grep -i location
# 기대: 한 번에 https://www.aboutfishing.kr/ 로 (중간에 http://www 를 거치지 않을 것)
curl -sIL "http://aboutfishing.kr/?event=knto" | grep -Ei "^(HTTP|location)"
curl -sI "https://aboutfishing.kr/.well-known/apple-app-site-association" | head -3
# 기대: 200 (301이 아닐 것)
curl -s "https://www.aboutfishing.kr/.well-known/apple-app-site-association" | head -3
curl -s "https://www.aboutfishing.kr/.well-known/assetlinks.json" | head -3
# 기대: 둘 다 JSON 본문. 9/8 현재는 404
curl -sI "https://www.aboutfishing.kr/" | head -3
# 기대: HTTP/2 200. 여기서 301이 나오면 무한 루프입니다
| 시점 | 할 일 |
|---|---|
| 9/8(화) 오전 | 0번 확인 회신 — apex 서빙 배포물 확정. 인증서 SAN 확인 |
| 9/8(화) 중 | 4번 P0 3건 처리 (앱 링크 검증 파일 게시, 토스 PG 도메인, API 키 허용 도메인). 301 규칙은 만들어두되 비활성 상태로 대기 |
| 9/9(수) 오전 | www 전환과 동시에 301 규칙 활성화 → 5번 검증 실행 → 결과 공유 |
| 9/9(수) 이후 | 구글 서치콘솔·네이버 서치어드바이저에서 apex 색인이 빠지고 www로 옮겨가는지 1~2주 관찰 |