기본 공개 위치는 서브도메인(예: global.example.co.jp/en/)이며, DNS 레코드 1건만으로 작동합니다. Google의 평가는 서브도메인이든 하위 디렉터리든 동일하지만, 브랜드나 URL 설계상의 이유로 example.co.jp/en/ 와 같이 자사 도메인 바로 아래에서 배포하려는 경우, 고객 측 CDN 또는 서버에서 언어 경로를 Sotomuke로 전달(리버스 프록시)하면 구현할 수 있습니다.
전제 조건
- 서브도메인(예:
global.example.co.jp)에서의 공개가 완료되어 있을 것. 전달 대상은 이 호스트 이름입니다. - 자사 도메인 앞단에 전달 규칙을 작성할 수 있는 환경이 있을 것(Cloudflare, 각종 CDN, nginx/Apache, Next.js/Vercel, Netlify 등). 공유 호스팅 서버나 STUDIO·Wix 등의 SaaS에서는 설정할 수 없습니다. 이 경우 서브도메인을 이용해 주십시오.
- 일본어 페이지는 지금까지와 같이 고객님의 서버에서 배포합니다. 전달하는 것은 언어 경로뿐입니다.
절차 개요
- 대시보드의 '공개 설정' → '하위 디렉터리로 배포하기'에서 공개 URL(예:
https://example.co.jp)을 저장합니다. 이후 canonical·hreflang·사이트맵·언어 전환의 URL이 이 도메인으로 바뀝니다. - 아래 방법 중 하나로
/en/・/zh-Hans/・/ko/등 선택한 언어의 경로(하위 전체)를global.example.co.jp로 전달합니다.Host 헤더도global.example.co.jp로 변경하는 것이 핵심입니다(Sotomuke는 호스트 이름으로 사이트를 식별합니다). - '전달 확인' 버튼으로 각 언어의 URL이 Sotomuke에서 응답하는지 확인합니다(응답에
x-sotomuke-site헤더가 포함됩니다). https://example.co.jp/robots.txt에Sitemap: https://global.example.co.jp/sitemap.xml한 줄을 추가합니다. Google은 robots.txt에서 참조된 사이트맵이라면 다른 호스트에 있어도 허용합니다. Search Console에서 example.co.jp 속성에 이 사이트맵을 제출해 주세요.
방법 A: Cloudflare(Origin Rules·코드 불필요)
도메인이 Cloudflare 프록시(주황색 구름) 아래에 있다면 가장 간단합니다. Rules → Origin Rules에서 다음 규칙을 만듭니다.
- 조건: URI Path starts with
/en/(언어별로 OR로 추가. 표현식으로 작성한다면(starts_with(http.request.uri.path, "/en/")) or (starts_with(http.request.uri.path, "/ko/"))) - Host header: Rewrite to
global.example.co.jp - DNS record: Override to
global.example.co.jp
API로 만드는 경우에는 origin_rules 단계의 규칙 세트에 action: "route"、action_parameters: { host_header: "global.example.co.jp", origin: { host: "global.example.co.jp" } } 을(를) 추가합니다.
방법 B: Cloudflare Worker(세밀하게 제어하려는 경우)
export default {
async fetch(request) {
const url = new URL(request.url);
const langs = ["en", "zh-Hans", "ko"]; // ダッシュボードで選んだ言語
const lang = url.pathname.split("/")[1];
if (langs.includes(lang) || url.pathname === "/sitemap-sotomuke.xml") {
const target = new URL(url);
target.hostname = "global.example.co.jp"; // 公開ホスト名
if (url.pathname === "/sitemap-sotomuke.xml") target.pathname = "/sitemap.xml";
const res = await fetch(target.toString(), { headers: request.headers, cf: { cacheTtl: 300 } });
return new Response(res.body, res);
}
return fetch(request); // それ以外は元サイトへ
},
};
Worker의 경로는 example.co.jp/* (으)로 설정합니다./sitemap-sotomuke.xml 도 전달해 두면 robots.txt에 동일 호스트의 사이트맵으로 작성할 수 있습니다.
방법 C: nginx
location ~ ^/(en|zh-Hans|ko)/ {
proxy_pass https://global.example.co.jp;
proxy_set_header Host global.example.co.jp;
proxy_ssl_server_name on;
proxy_ssl_name global.example.co.jp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location = /sitemap-sotomuke.xml {
proxy_pass https://global.example.co.jp/sitemap.xml;
proxy_set_header Host global.example.co.jp;
proxy_ssl_server_name on;
}
방법 D: Apache(mod_proxy)
SSLProxyEngine On
ProxyPreserveHost Off
ProxyPassMatch "^/(en|zh-Hans|ko)/(.*)$" "https://global.example.co.jp/$1/$2"
ProxyPass "/sitemap-sotomuke.xml" "https://global.example.co.jp/sitemap.xml"
RequestHeader set Host "global.example.co.jp"
mod_proxy・mod_proxy_http・mod_ssl 이(가) 필요합니다. 공유 호스팅 서버의 .htaccess에서는 일반적으로 사용할 수 없습니다.
방법 E: Next.js / Vercel
// next.config.js
module.exports = {
async rewrites() {
return [
{ source: "/:lang(en|zh-Hans|ko)/:path*", destination: "https://global.example.co.jp/:lang/:path*" },
{ source: "/sitemap-sotomuke.xml", destination: "https://global.example.co.jp/sitemap.xml" },
];
},
};
정적 사이트를 Vercel에 호스팅하는 경우에는 vercel.json 의 rewrites 에 같은 내용을 작성합니다.
방법 F: Netlify
# _redirects
/en/* https://global.example.co.jp/en/:splat 200
/zh-Hans/* https://global.example.co.jp/zh-Hans/:splat 200
/ko/* https://global.example.co.jp/ko/:splat 200
/sitemap-sotomuke.xml https://global.example.co.jp/sitemap.xml 200
방법 G: AWS CloudFront
Origin에 global.example.co.jp(HTTPS만, Origin protocol policy: HTTPS only)를 추가하고, Behavior의 Path pattern /en/* 등을 해당 Origin으로 지정합니다. Cache policy는 Query string을 전달하도록, Origin request policy는 Host 을 전달하지 않도록(CloudFront가 Origin의 호스트 이름을 전송) 설정합니다.
확인 포인트
curl -sI https://example.co.jp/en/ | grep -i x-sotomuke-site에서x-sotomuke-site: <スラッグ>이 반환되면 정상적으로 전달되고 있는 것입니다.- 쿼리 문자열(
?utm_source=등)은 그대로 전달해 주세요. - 전달 규칙은 WordPress 등의 라우팅보다 먼저 평가되어야 합니다. 원본 사이트가 404를 반환하는 경우 규칙의 순서를 확인해 주세요.
- 공개 URL을 설정해도 서브도메인 측 URL(
global.example.co.jp/en/은 계속 작동하지만, canonical이 자사 도메인을 가리키므로 검색 결과에는 자사 도메인의 URL이 표시됩니다. - 번역 페이지의 접속 통계는 변함없이 Sotomuke 대시보드에 표시됩니다.
제작사 담당자분께
에이전시 플랜에서는 각 사이트에 동일한 설정을 적용할 수 있습니다. 여러 사이트를 같은 CDN으로 운영하는 경우, 언어 경로 전달을 템플릿화해 두면 신규 사이트 추가를 몇 분 만에 마칠 수 있습니다. 설정 대행이나 검증에 관한 상담은 문의해 주세요.
