SEOオプション側のサイトでCORSエラーが発生します

AIシュリーマンのSEOオプションをサブドメイン方式で利用すると、翻訳サイトと元サイトは異なるオリジンになります。
元サイト: https://example.com 英語サイト: https://en.example.com 韓国語サイト: https://ko.example.com
翻訳サイトから元サイトのフォント、CSS、JavaScript等を読み込む際、元サイトのレスポンスに適切なCORSヘッダーがないと、ブラウザがリソースの利用を拒否する場合があります。

必要なレスポンスヘッダー

元サイト側で、許可する言語サブドメインの Origin だけを Access-Control-Allow-Origin として返します。
Access-Control-Allow-Origin: https://en.example.com Vary: Origin
Access-Control-Allow-Origin は、1つのレスポンスにつき1つのOriginを返す必要があります。複数のURLをカンマ区切りで指定することはできません。
使用できない例: Access-Control-Allow-Origin: https://en.example.com, https://ko.example.com
認証情報を含むリクエストへ * を使用することも避けてください。リクエストの Origin が許可リストに一致する場合だけ、そのOriginを返す構成を推奨します。

Nginxの設定例

英語と韓国語のサブドメインだけを許可する例です。
map $http_origin $cors_origin { default ""; "~^https://(en|ko)\.example\.com$" $http_origin; } server { # 既存の設定 location / { # 既存の設定 if ($cors_origin) { add_header Access-Control-Allow-Origin $cors_origin always; add_header Vary Origin always; } } }
対象ドメインに合わせて、en|koexample\.com を変更してください。

Apacheの設定例

<IfModule mod_headers.c> SetEnvIf Origin "^https://(en|ko)\.example\.com$" CORS_ALLOW_ORIGIN=$0 Header always set Access-Control-Allow-Origin %{CORS_ALLOW_ORIGIN}e env=CORS_ALLOW_ORIGIN Header always merge Vary Origin </IfModule>
すでに Vary ヘッダーを使用している場合は、既存値を消さずに Origin を追加できるようサーバー設定を調整してください。

Next.js Middlewareの設定例

import type { NextRequest } from 'next/server'; import { NextResponse } from 'next/server'; export function middleware(request: NextRequest) { const origin = request.headers.get('origin'); const allowedOrigin = /^https:\/\/(en|ko)\.example\.com$/; const response = NextResponse.next(); if (origin && allowedOrigin.test(origin)) { response.headers.set('Access-Control-Allow-Origin', origin); response.headers.append('Vary', 'Origin'); } return response; }
すべてのページへ適用するのではなく、必要に応じてフォントや静的ファイルのパスだけへMiddlewareを適用してください。

確認方法

ブラウザの開発者ツールを開き、NetworkまたはConsoleで失敗しているURLを確認します。
次の点を確認してください。
  • エラーになっているリソースのURL
  • リクエストの Origin
  • レスポンスの Access-Control-Allow-Origin
  • レスポンスの Vary: Origin
  • CDNやプロキシがOrigin別のレスポンスを混在させていないか
  • リダイレクト前後の両方でCORSヘッダーが付いているか
設定後は、元サイトとCDNのキャッシュを確認してください。古いCORSヘッダーがキャッシュされている場合は、設定変更後もエラーが続くことがあります。
対象言語が複数ある場合は、管理画面の「初期導入手順」に表示されるドメイン別の設定例もご確認ください。