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: OriginAccess-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|ko と example\.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ヘッダーがキャッシュされている場合は、設定変更後もエラーが続くことがあります。
対象言語が複数ある場合は、管理画面の「初期導入手順」に表示されるドメイン別の設定例もご確認ください。