외향 Sotomuke

← 헬프 센터 · 공개(DNS 설정)

하위 디렉터리(example.co.jp/en/)로 배포하기 — 개발자 가이드

자사 도메인 바로 아래의 /en/ 등으로 배포하려는 제작사·개발자를 위한 안내입니다. Cloudflare, Worker, nginx, Apache, Next.js/Vercel, Netlify, CloudFront의 전달 설정과 사이트맵 처리 방법.

기본 공개 위치는 서브도메인(예: 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에서는 설정할 수 없습니다. 이 경우 서브도메인을 이용해 주십시오.
  • 일본어 페이지는 지금까지와 같이 고객님의 서버에서 배포합니다. 전달하는 것은 언어 경로뿐입니다.

절차 개요

  1. 대시보드의 '공개 설정' → '하위 디렉터리로 배포하기'에서 공개 URL(예: https://example.co.jp)을 저장합니다. 이후 canonical·hreflang·사이트맵·언어 전환의 URL이 이 도메인으로 바뀝니다.
  2. 아래 방법 중 하나로/en/・/zh-Hans/・/ko/ 등 선택한 언어의 경로(하위 전체)를 global.example.co.jp 로 전달합니다.Host 헤더도 global.example.co.jp 로 변경하는 것이 핵심입니다(Sotomuke는 호스트 이름으로 사이트를 식별합니다).
  3. '전달 확인' 버튼으로 각 언어의 URL이 Sotomuke에서 응답하는지 확인합니다(응답에 x-sotomuke-site 헤더가 포함됩니다).
  4. 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에서 다음 규칙을 만듭니다.

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의 호스트 이름을 전송) 설정합니다.

확인 포인트

제작사 담당자분께

에이전시 플랜에서는 각 사이트에 동일한 설정을 적용할 수 있습니다. 여러 사이트를 같은 CDN으로 운영하는 경우, 언어 경로 전달을 템플릿화해 두면 신규 사이트 추가를 몇 분 만에 마칠 수 있습니다. 설정 대행이나 검증에 관한 상담은 문의해 주세요.

관련 문서

해결되지 않는 경우 문의해 주십시오. 통상 1영업일 이내에 답변드립니다.

한국어