[{"data":1,"prerenderedAt":1525},["ShallowReactive",2],{"content-/cloudflare-pages-reload-404-fix":3,"all-pages-for-dir":1502,"related-/cloudflare-pages-reload-404-fix":1503,"og-image-/cloudflare-pages-reload-404-fix":1524},{"id":4,"title":5,"body":6,"category":1487,"concepts":1487,"description":1488,"extension":1489,"meta":1490,"navigation":969,"ogImage":1487,"path":1491,"project_name":1487,"published":1492,"publishedAt":1493,"seo":1494,"source":1487,"stem":1495,"tags":1496,"todo":1487,"unpublished":1492,"updatedAt":1487,"__hash__":1501},"pages/2025-11/2025-11-27/cloudflare-pages-reload-404-fix.md","Cloudflare PagesでリロードするとNuxtページが404になる問題の調査と解決",{"type":7,"value":8,"toc":1462},"minimark",[9,13,17,21,43,49,52,62,65,70,73,78,117,128,278,281,291,313,320,330,514,521,540,543,558,562,570,575,734,739,880,883,944,947,950,1009,1012,1022,1055,1058,1199,1202,1205,1219,1222,1227,1234,1246,1249,1257,1271,1277,1280,1305,1308,1311,1391,1394,1397,1422,1425,1458],[10,11,5],"h1",{"id":12},"cloudflare-pagesでリロードするとnuxtページが404になる問題の調査と解決",[14,15,16],"h2",{"id":16},"問題の症状",[18,19,20],"p",{},"Cloudflare Pagesにデプロイした動的ルートのNuxtページで以下の問題が発生：",[22,23,24,32],"ul",{},[25,26,27,31],"li",{},[28,29,30],"strong",{},"初回アクセス",": ページが正常に表示される",[25,33,34,37,38,42],{},[28,35,36],{},"F5でリロード",": ",[39,40,41],"code",{},"ERR_HTTP_RESPONSE_CODE_FAILURE 404 (Not Found)"," エラーが発生",[18,44,45,46],{},"例: ",[39,47,48],{},"https://log.eurekapu.com/2025-11-27/domain-transfer-onamae-to-cloudflare",[18,50,51],{},"ブラウザのコンソールには以下のエラーが表示：",[53,54,59],"pre",{"className":55,"code":57,"language":58},[56],"language-text","GET https://log.eurekapu.com/2025-11-27/domain-transfer-onamae-to-cloudflare net::ERR_HTTP_RESPONSE_CODE_FAILURE 404 (Not Found)\n","text",[39,60,57],{"__ignoreMap":61},"",[14,63,64],{"id":64},"原因の調査プロセス",[66,67,69],"h3",{"id":68},"当初の仮説誤り","当初の仮説（誤り）",[18,71,72],{},"Cloudflare PagesでNuxt 3のSSR（Server Side Rendering）アプリケーションを動作させる際のルーティング設定不足が原因と、最初は考えました。",[18,74,75],{},[28,76,77],{},"なぜ初回は成功してリロードで失敗するのか？",[79,80,81,98],"ol",{},[25,82,83,86,87],{},[28,84,85],{},"初回アクセス（クライアントサイドナビゲーション）",":",[22,88,89,92,95],{},[25,90,91],{},"Nuxtアプリがクライアントサイドで動作",[25,93,94],{},"Vue Routerがクライアント側でルーティングを処理",[25,96,97],{},"サーバーへのリクエストなしでページが表示される",[25,99,100,86,103],{},[28,101,102],{},"リロード時（サーバーサイドリクエスト）",[22,104,105,108,111],{},[25,106,107],{},"ブラウザがサーバーに直接HTTPリクエストを送信",[25,109,110],{},"Cloudflare Pagesが適切にNitro関数にルーティングできていない",[25,112,113,116],{},[39,114,115],{},"_routes.json","の設定不足により404が返される",[18,118,119,120,123,124,127],{},"この仮説に基づき、",[39,121,122],{},"nuxt.config.ts","に以下の設定を追加しましたが、",[28,125,126],{},"問題は解決しませんでした","：",[53,129,133],{"className":130,"code":131,"language":132,"meta":61,"style":61},"language-typescript shiki shiki-themes vitesse-light vitesse-light","nitro: {\n  preset: \"cloudflare-pages\",\n  prerender: {\n    autoSubfolderIndex: false,\n    crawlLinks: true,\n    failOnError: false\n  }\n},\nrouteRules: {\n  '/**': { ssr: true }\n}\n","typescript",[39,134,135,150,172,182,196,209,220,226,232,242,272],{"__ignoreMap":61},[136,137,140,144,147],"span",{"class":138,"line":139},"line",1,[136,141,143],{"class":142},"senZ8","nitro",[136,145,86],{"class":146},"shFtX",[136,148,149],{"class":146}," {\n",[136,151,153,156,158,162,166,169],{"class":138,"line":152},2,[136,154,155],{"class":142},"  preset",[136,157,86],{"class":146},[136,159,161],{"class":160},"sMJiu"," \"",[136,163,165],{"class":164},"sdGka","cloudflare-pages",[136,167,168],{"class":160},"\"",[136,170,171],{"class":146},",\n",[136,173,175,178,180],{"class":138,"line":174},3,[136,176,177],{"class":142},"  prerender",[136,179,86],{"class":146},[136,181,149],{"class":146},[136,183,185,188,190,194],{"class":138,"line":184},4,[136,186,187],{"class":142},"    autoSubfolderIndex",[136,189,86],{"class":146},[136,191,193],{"class":192},"sHkkW"," false",[136,195,171],{"class":146},[136,197,199,202,204,207],{"class":138,"line":198},5,[136,200,201],{"class":142},"    crawlLinks",[136,203,86],{"class":146},[136,205,206],{"class":192}," true",[136,208,171],{"class":146},[136,210,212,215,217],{"class":138,"line":211},6,[136,213,214],{"class":142},"    failOnError",[136,216,86],{"class":146},[136,218,219],{"class":192}," false\n",[136,221,223],{"class":138,"line":222},7,[136,224,225],{"class":146},"  }\n",[136,227,229],{"class":138,"line":228},8,[136,230,231],{"class":146},"},\n",[136,233,235,238,240],{"class":138,"line":234},9,[136,236,237],{"class":142},"routeRules",[136,239,86],{"class":146},[136,241,149],{"class":146},[136,243,245,248,251,254,257,260,264,266,269],{"class":138,"line":244},10,[136,246,247],{"class":160},"  '",[136,249,250],{"class":164},"/**",[136,252,253],{"class":160},"'",[136,255,86],{"class":256},"sG7-3",[136,258,259],{"class":146}," { ",[136,261,263],{"class":262},"sz8Xr","ssr",[136,265,37],{"class":146},[136,267,268],{"class":192},"true",[136,270,271],{"class":146}," }\n",[136,273,275],{"class":138,"line":274},11,[136,276,277],{"class":146},"}\n",[66,279,280],{"id":280},"なぜ当初の仮説が誤りだったのか",[18,282,283,284,286,287,290],{},"Nuxt 3の",[39,285,165],{}," presetは",[28,288,289],{},"デフォルトでSSRモード","で動作します。つまり：",[22,292,293,298,303],{},[25,294,295,297],{},[39,296,122],{},"の設定変更は不要だった",[25,299,300,302],{},[39,301,237],{},"を明示的に設定しなくても、すべてのルートは既にSSRとして扱われている",[25,304,305,306,312],{},"問題の本質は、Nuxt/Nitroの設定ではなく、",[28,307,308,309,311],{},"ビルド後の",[39,310,115],{},"ファイルの内容","だった",[66,314,316,317,319],{"id":315},"実際の原因_routesjsonの誤った除外ルール","実際の原因（",[39,318,115],{},"の誤った除外ルール）",[18,321,322,323,326,327,329],{},"ビルド出力ディレクトリ（",[39,324,325],{},"dist/","）の",[39,328,115],{},"を確認したところ、以下の設定が見つかりました：",[53,331,335],{"className":332,"code":333,"language":334,"meta":61,"style":61},"language-json shiki shiki-themes vitesse-light vitesse-light","{\n  \"version\": 1,\n  \"include\": [\"/*\"],\n  \"exclude\": [\n    \"/_nuxt/*\",\n    \"/dump.pages.sql\",\n    \"/favicon.ico\",\n    \"/robots.txt\",\n    \"/data/*\",\n    \"/excel/*\",\n    \"/images/*\",\n    \"/__nuxt_content/*\",\n    \"/20*/*\"  // ← これが問題！\n  ]\n}\n","json",[39,336,337,342,361,385,399,411,422,433,444,455,466,477,489,503,509],{"__ignoreMap":61},[136,338,339],{"class":138,"line":139},[136,340,341],{"class":146},"{\n",[136,343,344,348,351,353,355,359],{"class":138,"line":152},[136,345,347],{"class":346},"sqvqQ","  \"",[136,349,350],{"class":262},"version",[136,352,168],{"class":346},[136,354,86],{"class":146},[136,356,358],{"class":357},"sM54T"," 1",[136,360,171],{"class":146},[136,362,363,365,368,370,372,375,377,380,382],{"class":138,"line":174},[136,364,347],{"class":346},[136,366,367],{"class":262},"include",[136,369,168],{"class":346},[136,371,86],{"class":146},[136,373,374],{"class":146}," [",[136,376,168],{"class":160},[136,378,379],{"class":164},"/*",[136,381,168],{"class":160},[136,383,384],{"class":146},"],\n",[136,386,387,389,392,394,396],{"class":138,"line":184},[136,388,347],{"class":346},[136,390,391],{"class":262},"exclude",[136,393,168],{"class":346},[136,395,86],{"class":146},[136,397,398],{"class":146}," [\n",[136,400,401,404,407,409],{"class":138,"line":198},[136,402,403],{"class":160},"    \"",[136,405,406],{"class":164},"/_nuxt/*",[136,408,168],{"class":160},[136,410,171],{"class":146},[136,412,413,415,418,420],{"class":138,"line":211},[136,414,403],{"class":160},[136,416,417],{"class":164},"/dump.pages.sql",[136,419,168],{"class":160},[136,421,171],{"class":146},[136,423,424,426,429,431],{"class":138,"line":222},[136,425,403],{"class":160},[136,427,428],{"class":164},"/favicon.ico",[136,430,168],{"class":160},[136,432,171],{"class":146},[136,434,435,437,440,442],{"class":138,"line":228},[136,436,403],{"class":160},[136,438,439],{"class":164},"/robots.txt",[136,441,168],{"class":160},[136,443,171],{"class":146},[136,445,446,448,451,453],{"class":138,"line":234},[136,447,403],{"class":160},[136,449,450],{"class":164},"/data/*",[136,452,168],{"class":160},[136,454,171],{"class":146},[136,456,457,459,462,464],{"class":138,"line":244},[136,458,403],{"class":160},[136,460,461],{"class":164},"/excel/*",[136,463,168],{"class":160},[136,465,171],{"class":146},[136,467,468,470,473,475],{"class":138,"line":274},[136,469,403],{"class":160},[136,471,472],{"class":164},"/images/*",[136,474,168],{"class":160},[136,476,171],{"class":146},[136,478,480,482,485,487],{"class":138,"line":479},12,[136,481,403],{"class":160},[136,483,484],{"class":164},"/__nuxt_content/*",[136,486,168],{"class":160},[136,488,171],{"class":146},[136,490,492,494,497,499],{"class":138,"line":491},13,[136,493,403],{"class":160},[136,495,496],{"class":164},"/20*/*",[136,498,168],{"class":160},[136,500,502],{"class":501},"sxvE3","  // ← これが問題！\n",[136,504,506],{"class":138,"line":505},14,[136,507,508],{"class":146},"  ]\n",[136,510,512],{"class":138,"line":511},15,[136,513,277],{"class":146},[18,515,516],{},[28,517,518,520],{},[39,519,496],{},"パターンがコンテンツページを除外していました。",[18,522,523,524,527,528,531,532,535,536,539],{},"この除外ルールは",[39,525,526],{},"scripts/fix-routes.mjs","で定義されており、画像ファイル（",[39,529,530],{},"/2025-11-27/image.png","など）を静的ファイルとして扱う意図でしたが、",[28,533,534],{},"コンテンツページ","（",[39,537,538],{},"/2025-11-27/domain-transfer-onamae-to-cloudflare","）も除外してしまっていました。",[18,541,542],{},"結果：",[22,544,545,552,555],{},[25,546,547,548,551],{},"コンテンツページへのリクエストが",[39,549,550],{},"_worker.js","（SSR関数）にルーティングされない",[25,553,554],{},"対応する静的HTMLファイルも存在しない",[25,556,557],{},"404エラーが発生",[14,559,561],{"id":560},"解決方法検討中","解決方法（検討中）",[18,563,564,566,567,569],{},[39,565,526],{},"から",[39,568,496],{},"の除外ルールを削除：",[18,571,572],{},[28,573,574],{},"修正前：",[53,576,580],{"className":577,"code":578,"language":579,"meta":61,"style":61},"language-javascript shiki shiki-themes vitesse-light vitesse-light","const routes = {\n  version: 1,\n  include: [\"/*\"],\n  exclude: [\n    \"/_nuxt/*\",\n    \"/dump.pages.sql\",\n    \"/favicon.ico\",\n    \"/robots.txt\",\n    \"/data/*\",\n    \"/excel/*\",\n    \"/images/*\",\n    \"/__nuxt_content/*\",\n    \"/20*/*\"  // ← 削除\n  ]\n};\n","javascript",[39,581,582,597,608,625,634,644,654,664,674,684,694,704,714,725,729],{"__ignoreMap":61},[136,583,584,588,592,595],{"class":138,"line":139},[136,585,587],{"class":586},"stQ0i","const",[136,589,591],{"class":590},"s4oTP"," routes",[136,593,594],{"class":146}," =",[136,596,149],{"class":146},[136,598,599,602,604,606],{"class":138,"line":152},[136,600,601],{"class":262},"  version",[136,603,86],{"class":146},[136,605,358],{"class":357},[136,607,171],{"class":146},[136,609,610,613,615,617,619,621,623],{"class":138,"line":174},[136,611,612],{"class":262},"  include",[136,614,86],{"class":146},[136,616,374],{"class":146},[136,618,168],{"class":160},[136,620,379],{"class":164},[136,622,168],{"class":160},[136,624,384],{"class":146},[136,626,627,630,632],{"class":138,"line":184},[136,628,629],{"class":262},"  exclude",[136,631,86],{"class":146},[136,633,398],{"class":146},[136,635,636,638,640,642],{"class":138,"line":198},[136,637,403],{"class":160},[136,639,406],{"class":164},[136,641,168],{"class":160},[136,643,171],{"class":146},[136,645,646,648,650,652],{"class":138,"line":211},[136,647,403],{"class":160},[136,649,417],{"class":164},[136,651,168],{"class":160},[136,653,171],{"class":146},[136,655,656,658,660,662],{"class":138,"line":222},[136,657,403],{"class":160},[136,659,428],{"class":164},[136,661,168],{"class":160},[136,663,171],{"class":146},[136,665,666,668,670,672],{"class":138,"line":228},[136,667,403],{"class":160},[136,669,439],{"class":164},[136,671,168],{"class":160},[136,673,171],{"class":146},[136,675,676,678,680,682],{"class":138,"line":234},[136,677,403],{"class":160},[136,679,450],{"class":164},[136,681,168],{"class":160},[136,683,171],{"class":146},[136,685,686,688,690,692],{"class":138,"line":244},[136,687,403],{"class":160},[136,689,461],{"class":164},[136,691,168],{"class":160},[136,693,171],{"class":146},[136,695,696,698,700,702],{"class":138,"line":274},[136,697,403],{"class":160},[136,699,472],{"class":164},[136,701,168],{"class":160},[136,703,171],{"class":146},[136,705,706,708,710,712],{"class":138,"line":479},[136,707,403],{"class":160},[136,709,484],{"class":164},[136,711,168],{"class":160},[136,713,171],{"class":146},[136,715,716,718,720,722],{"class":138,"line":491},[136,717,403],{"class":160},[136,719,496],{"class":164},[136,721,168],{"class":160},[136,723,724],{"class":501},"  // ← 削除\n",[136,726,727],{"class":138,"line":505},[136,728,508],{"class":146},[136,730,731],{"class":138,"line":511},[136,732,733],{"class":146},"};\n",[18,735,736],{},[28,737,738],{},"修正後：",[53,740,742],{"className":577,"code":741,"language":579,"meta":61,"style":61},"const routes = {\n  version: 1,\n  include: [\"/*\"],\n  exclude: [\n    \"/_nuxt/*\",\n    \"/dump.pages.sql\",\n    \"/favicon.ico\",\n    \"/robots.txt\",\n    \"/data/*\",\n    \"/excel/*\",\n    \"/images/*\",\n    \"/__nuxt_content/*\"\n    // /20*/* を削除\n  ]\n};\n",[39,743,744,754,764,780,788,798,808,818,828,838,848,858,867,872,876],{"__ignoreMap":61},[136,745,746,748,750,752],{"class":138,"line":139},[136,747,587],{"class":586},[136,749,591],{"class":590},[136,751,594],{"class":146},[136,753,149],{"class":146},[136,755,756,758,760,762],{"class":138,"line":152},[136,757,601],{"class":262},[136,759,86],{"class":146},[136,761,358],{"class":357},[136,763,171],{"class":146},[136,765,766,768,770,772,774,776,778],{"class":138,"line":174},[136,767,612],{"class":262},[136,769,86],{"class":146},[136,771,374],{"class":146},[136,773,168],{"class":160},[136,775,379],{"class":164},[136,777,168],{"class":160},[136,779,384],{"class":146},[136,781,782,784,786],{"class":138,"line":184},[136,783,629],{"class":262},[136,785,86],{"class":146},[136,787,398],{"class":146},[136,789,790,792,794,796],{"class":138,"line":198},[136,791,403],{"class":160},[136,793,406],{"class":164},[136,795,168],{"class":160},[136,797,171],{"class":146},[136,799,800,802,804,806],{"class":138,"line":211},[136,801,403],{"class":160},[136,803,417],{"class":164},[136,805,168],{"class":160},[136,807,171],{"class":146},[136,809,810,812,814,816],{"class":138,"line":222},[136,811,403],{"class":160},[136,813,428],{"class":164},[136,815,168],{"class":160},[136,817,171],{"class":146},[136,819,820,822,824,826],{"class":138,"line":228},[136,821,403],{"class":160},[136,823,439],{"class":164},[136,825,168],{"class":160},[136,827,171],{"class":146},[136,829,830,832,834,836],{"class":138,"line":234},[136,831,403],{"class":160},[136,833,450],{"class":164},[136,835,168],{"class":160},[136,837,171],{"class":146},[136,839,840,842,844,846],{"class":138,"line":244},[136,841,403],{"class":160},[136,843,461],{"class":164},[136,845,168],{"class":160},[136,847,171],{"class":146},[136,849,850,852,854,856],{"class":138,"line":274},[136,851,403],{"class":160},[136,853,472],{"class":164},[136,855,168],{"class":160},[136,857,171],{"class":146},[136,859,860,862,864],{"class":138,"line":479},[136,861,403],{"class":160},[136,863,484],{"class":164},[136,865,866],{"class":160},"\"\n",[136,868,869],{"class":138,"line":491},[136,870,871],{"class":501},"    // /20*/* を削除\n",[136,873,874],{"class":138,"line":505},[136,875,508],{"class":146},[136,877,878],{"class":138,"line":511},[136,879,733],{"class":146},[66,881,882],{"id":882},"なぜこの修正で解決するのか",[79,884,885,916],{},[25,886,887,890],{},[28,888,889],{},"画像ファイルは既に静的ファイルとして処理されている",[22,891,892,905,911],{},[25,893,894,896,897,900,901,904],{},[39,895,122],{},"の",[39,898,899],{},"hooks['nitro:build:public-assets']","で、コンテンツディレクトリの画像を",[39,902,903],{},"public/","ディレクトリにコピー済み",[25,906,907,908,910],{},"画像ファイル（例：",[39,909,530],{},"）は既に静的ファイルとしてアクセス可能",[25,912,913,915],{},[39,914,496],{},"の除外ルールは不要",[25,917,918,921],{},[28,919,920],{},"コンテンツページはSSR関数で処理する必要がある",[22,922,923,929,934],{},[25,924,925,926,928],{},"コンテンツページ（例：",[39,927,538],{},"）は動的ルート",[25,930,931,933],{},[39,932,550],{},"（Nitro関数）でサーバーサイドレンダリングする必要がある",[25,935,936,896,938,940,941,943],{},[39,937,115],{},[39,939,391],{},"リストから除外すれば、",[39,942,550],{},"にルーティングされる",[14,945,946],{"id":946},"デプロイ手順",[18,948,949],{},"修正後、以下のコマンドで再ビルド・デプロイ：",[53,951,955],{"className":952,"code":953,"language":954,"meta":61,"style":61},"language-bash shiki shiki-themes vitesse-light vitesse-light","cd apps/web\n\n# ビルド（postbuildフックでfix-routes.mjsが自動実行される）\npnpm build\n\n# Cloudflare Pagesにデプロイ\npnpm exec wrangler pages deploy\n","bash",[39,956,957,965,971,976,984,988,993],{"__ignoreMap":61},[136,958,959,962],{"class":138,"line":139},[136,960,961],{"class":262},"cd",[136,963,964],{"class":164}," apps/web\n",[136,966,967],{"class":138,"line":152},[136,968,970],{"emptyLinePlaceholder":969},true,"\n",[136,972,973],{"class":138,"line":174},[136,974,975],{"class":501},"# ビルド（postbuildフックでfix-routes.mjsが自動実行される）\n",[136,977,978,981],{"class":138,"line":184},[136,979,980],{"class":142},"pnpm",[136,982,983],{"class":164}," build\n",[136,985,986],{"class":138,"line":198},[136,987,970],{"emptyLinePlaceholder":969},[136,989,990],{"class":138,"line":211},[136,991,992],{"class":501},"# Cloudflare Pagesにデプロイ\n",[136,994,995,997,1000,1003,1006],{"class":138,"line":222},[136,996,980],{"class":142},[136,998,999],{"class":164}," exec",[136,1001,1002],{"class":164}," wrangler",[136,1004,1005],{"class":164}," pages",[136,1007,1008],{"class":164}," deploy\n",[66,1010,1011],{"id":1011},"ビルド時の確認",[18,1013,1014,1015,1018,1019,1021],{},"ビルド完了後、",[39,1016,1017],{},"dist/_routes.json","を確認し、",[39,1020,496],{},"が除外リストから削除されていることを確認：",[53,1023,1025],{"className":952,"code":1024,"language":954,"meta":61,"style":61},"# 確認コマンド（Windows）\ncat apps/web/dist/_routes.json\n\n# 確認コマンド（Linux/Mac）\ncat apps/web/dist/_routes.json\n",[39,1026,1027,1032,1040,1044,1049],{"__ignoreMap":61},[136,1028,1029],{"class":138,"line":139},[136,1030,1031],{"class":501},"# 確認コマンド（Windows）\n",[136,1033,1034,1037],{"class":138,"line":152},[136,1035,1036],{"class":142},"cat",[136,1038,1039],{"class":164}," apps/web/dist/_routes.json\n",[136,1041,1042],{"class":138,"line":174},[136,1043,970],{"emptyLinePlaceholder":969},[136,1045,1046],{"class":138,"line":184},[136,1047,1048],{"class":501},"# 確認コマンド（Linux/Mac）\n",[136,1050,1051,1053],{"class":138,"line":198},[136,1052,1036],{"class":142},[136,1054,1039],{"class":164},[18,1056,1057],{},"期待される出力：",[53,1059,1061],{"className":332,"code":1060,"language":334,"meta":61,"style":61},"{\n  \"version\": 1,\n  \"include\": [\"/*\"],\n  \"exclude\": [\n    \"/_nuxt/*\",\n    \"/dump.pages.sql\",\n    \"/favicon.ico\",\n    \"/robots.txt\",\n    \"/data/*\",\n    \"/excel/*\",\n    \"/images/*\",\n    \"/__nuxt_content/*\"\n  ]\n}\n",[39,1062,1063,1067,1081,1101,1113,1123,1133,1143,1153,1163,1173,1183,1191,1195],{"__ignoreMap":61},[136,1064,1065],{"class":138,"line":139},[136,1066,341],{"class":146},[136,1068,1069,1071,1073,1075,1077,1079],{"class":138,"line":152},[136,1070,347],{"class":346},[136,1072,350],{"class":262},[136,1074,168],{"class":346},[136,1076,86],{"class":146},[136,1078,358],{"class":357},[136,1080,171],{"class":146},[136,1082,1083,1085,1087,1089,1091,1093,1095,1097,1099],{"class":138,"line":174},[136,1084,347],{"class":346},[136,1086,367],{"class":262},[136,1088,168],{"class":346},[136,1090,86],{"class":146},[136,1092,374],{"class":146},[136,1094,168],{"class":160},[136,1096,379],{"class":164},[136,1098,168],{"class":160},[136,1100,384],{"class":146},[136,1102,1103,1105,1107,1109,1111],{"class":138,"line":184},[136,1104,347],{"class":346},[136,1106,391],{"class":262},[136,1108,168],{"class":346},[136,1110,86],{"class":146},[136,1112,398],{"class":146},[136,1114,1115,1117,1119,1121],{"class":138,"line":198},[136,1116,403],{"class":160},[136,1118,406],{"class":164},[136,1120,168],{"class":160},[136,1122,171],{"class":146},[136,1124,1125,1127,1129,1131],{"class":138,"line":211},[136,1126,403],{"class":160},[136,1128,417],{"class":164},[136,1130,168],{"class":160},[136,1132,171],{"class":146},[136,1134,1135,1137,1139,1141],{"class":138,"line":222},[136,1136,403],{"class":160},[136,1138,428],{"class":164},[136,1140,168],{"class":160},[136,1142,171],{"class":146},[136,1144,1145,1147,1149,1151],{"class":138,"line":228},[136,1146,403],{"class":160},[136,1148,439],{"class":164},[136,1150,168],{"class":160},[136,1152,171],{"class":146},[136,1154,1155,1157,1159,1161],{"class":138,"line":234},[136,1156,403],{"class":160},[136,1158,450],{"class":164},[136,1160,168],{"class":160},[136,1162,171],{"class":146},[136,1164,1165,1167,1169,1171],{"class":138,"line":244},[136,1166,403],{"class":160},[136,1168,461],{"class":164},[136,1170,168],{"class":160},[136,1172,171],{"class":146},[136,1174,1175,1177,1179,1181],{"class":138,"line":274},[136,1176,403],{"class":160},[136,1178,472],{"class":164},[136,1180,168],{"class":160},[136,1182,171],{"class":146},[136,1184,1185,1187,1189],{"class":138,"line":479},[136,1186,403],{"class":160},[136,1188,484],{"class":164},[136,1190,866],{"class":160},[136,1192,1193],{"class":138,"line":491},[136,1194,508],{"class":146},[136,1196,1197],{"class":138,"line":505},[136,1198,277],{"class":146},[14,1200,1201],{"id":1201},"確認方法",[18,1203,1204],{},"デプロイ完了後：",[79,1206,1207,1213,1216],{},[25,1208,1209,1210,1212],{},"ブラウザで動的ルートにアクセス（例：",[39,1211,48],{},"）",[25,1214,1215],{},"F5キーでページをリロード",[25,1217,1218],{},"404エラーが発生せず、ページが正常に表示されることを確認",[14,1220,1221],{"id":1221},"検証結果",[18,1223,1224],{},[28,1225,1226],{},"✅ 問題は解決しました（2025-11-27）",[18,1228,1229,566,1231,1233],{},[39,1230,526],{},[39,1232,496],{},"の除外ルールを削除し、再ビルド・デプロイした結果：",[22,1235,1236,1241],{},[25,1237,1238,1240],{},[28,1239,30],{},": ✅ 正常に表示",[25,1242,1243,1245],{},[28,1244,36],{},": ✅ 正常に表示（404エラーなし）",[66,1247,1248],{"id":1248},"結論",[18,1250,1251,1252,896,1254,1256],{},"問題の原因は",[39,1253,115],{},[39,1255,496],{},"除外ルールでした。このルールにより：",[22,1258,1259,1268],{},[25,1260,1261,1262,1264,1265,1267],{},"コンテンツページ（",[39,1263,538],{},"）が",[39,1266,550],{},"にルーティングされず",[25,1269,1270],{},"対応する静的HTMLファイルも存在しないため404エラーが発生",[18,1272,1273,1274,1276],{},"除外ルールを削除することで、すべてのコンテンツページが正しくSSR関数（",[39,1275,550],{},"）でレンダリングされるようになり、リロード時も正常に動作するようになりました。",[14,1278,1279],{"id":1279},"関連情報",[22,1281,1282,1291,1298],{},[25,1283,1284],{},[1285,1286,1290],"a",{"href":1287,"rel":1288},"https://nuxt.com/deploy/cloudflare",[1289],"nofollow","Nuxt 3 - Cloudflare Pages デプロイ",[25,1292,1293],{},[1285,1294,1297],{"href":1295,"rel":1296},"https://nitro.unjs.io/deploy/providers/cloudflare",[1289],"Nitro - Cloudflare Pages preset",[25,1299,1300],{},[1285,1301,1304],{"href":1302,"rel":1303},"https://nuxt.com/docs/guide/concepts/rendering#route-rules",[1289],"Nuxt Route Rules",[14,1306,1307],{"id":1307},"トラブルシューティング",[66,1309,1310],{"id":1310},"この修正で問題が解決しない場合",[79,1312,1313,1344,1359,1369],{},[25,1314,1315,1320,1331],{},[28,1316,1317,1319],{},[39,1318,115],{},"の内容を確認",[53,1321,1323],{"className":952,"code":1322,"language":954,"meta":61,"style":61},"cat apps/web/dist/_routes.json\n",[39,1324,1325],{"__ignoreMap":61},[136,1326,1327,1329],{"class":138,"line":139},[136,1328,1036],{"class":142},[136,1330,1039],{"class":164},[22,1332,1333,1338],{},[25,1334,1335,1337],{},[39,1336,496],{},"が本当に削除されているか確認",[25,1339,1340,1343],{},[39,1341,1342],{},"postbuild","スクリプトが正しく実行されているか確認",[25,1345,1346,1349],{},[28,1347,1348],{},"Cloudflare Pagesのデプロイログを確認",[22,1350,1351,1354],{},[25,1352,1353],{},"デプロイ時にエラーが発生していないか",[25,1355,1356,1358],{},[39,1357,550],{},"が正しくデプロイされているか",[25,1360,1361,1364],{},[28,1362,1363],{},"Cloudflare Pagesのキャッシュをクリア",[22,1365,1366],{},[25,1367,1368],{},"Cloudflare Pagesダッシュボードからキャッシュをパージ",[25,1370,1371,1374,1386],{},[28,1372,1373],{},"ローカルでプレビュー",[53,1375,1377],{"className":952,"code":1376,"language":954,"meta":61,"style":61},"pnpm preview\n",[39,1378,1379],{"__ignoreMap":61},[136,1380,1381,1383],{"class":138,"line":139},[136,1382,980],{"class":142},[136,1384,1385],{"class":164}," preview\n",[22,1387,1388],{},[25,1389,1390],{},"ローカル環境で本番ビルドをテストし、問題を再現できるか確認",[66,1392,1393],{"id":1393},"デバッグのヒント",[18,1395,1396],{},"問題が発生している場合、以下を確認：",[22,1398,1399,1405,1413],{},[25,1400,1401,1404],{},[28,1402,1403],{},"ブラウザの開発者ツール（Network タブ）",": 実際にどのリクエストが送信され、どのレスポンスが返されているか",[25,1406,1407,37,1410,1412],{},[28,1408,1409],{},"Cloudflare Pagesのファンクションログ",[39,1411,550],{},"が実行されているか、エラーが発生していないか",[25,1414,1415,1421],{},[28,1416,1417,1420],{},[39,1418,1419],{},"wrangler pages dev","でローカルテスト",": 本番環境と同じ挙動を再現できるか",[66,1423,1424],{"id":1424},"重要な学び",[22,1426,1427,1446],{},[25,1428,1429,1434],{},[28,1430,1431,1433],{},[39,1432,115],{},"がCloudflare Pagesのルーティングを制御している",[22,1435,1436,1441],{},[25,1437,1438,1440],{},[39,1439,367],{},": SSR関数でレンダリングするパス",[25,1442,1443,1445],{},[39,1444,391],{},": 静的ファイルとして配信するパス",[25,1447,1448,1451,1452,1454,1455,1457],{},[28,1449,1450],{},"ビルド後のファイルを確認する重要性",": 設定ファイル（",[39,1453,122],{},"）だけでなく、実際のビルド出力（",[39,1456,1017],{},"）を確認することで、問題の根本原因を特定できる",[1459,1460,1461],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sqvqQ, html code.shiki .sqvqQ{--shiki-default:#99841877;--shiki-dark:#99841877}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}",{"title":61,"searchDepth":152,"depth":152,"links":1463},[1464,1465,1471,1474,1477,1478,1481,1482],{"id":16,"depth":152,"text":16},{"id":64,"depth":152,"text":64,"children":1466},[1467,1468,1469],{"id":68,"depth":174,"text":69},{"id":280,"depth":174,"text":280},{"id":315,"depth":174,"text":1470},"実際の原因（_routes.jsonの誤った除外ルール）",{"id":560,"depth":152,"text":561,"children":1472},[1473],{"id":882,"depth":174,"text":882},{"id":946,"depth":152,"text":946,"children":1475},[1476],{"id":1011,"depth":174,"text":1011},{"id":1201,"depth":152,"text":1201},{"id":1221,"depth":152,"text":1221,"children":1479},[1480],{"id":1248,"depth":174,"text":1248},{"id":1279,"depth":152,"text":1279},{"id":1307,"depth":152,"text":1307,"children":1483},[1484,1485,1486],{"id":1310,"depth":174,"text":1310},{"id":1393,"depth":174,"text":1393},{"id":1424,"depth":174,"text":1424},null,"Cloudflare Pagesにデプロイした動的ルートのNuxtページで、初回アクセスは成功するがF5リロードすると404エラーが発生する問題の原因調査プロセスと、_routes.jsonの除外ルール修正による解決策","md",{},"/cloudflare-pages-reload-404-fix",false,"2025-11-27T00:00:00.000Z",{"title":5,"description":1488},"2025-11/2025-11-27/cloudflare-pages-reload-404-fix",[1497,1498,1499,1307,1500,115],"Cloudflare Pages","Nuxt","SSR","デプロイ","u_sFk3BfXrwDAnl4ODGADV5QvAG32usZJh2lZsDq-KM",[],[1504,1508,1512,1516,1520],{"title":1505,"path":1506,"publishedAt":1507},"pnpm generate が exit 134 で落ちた日——ヒープOOMと検証スクリプト偽陽性の二段落ち","/generate-oom-and-verify-false-positive","2026-07-04T00:00:00.000Z",{"title":1509,"path":1510,"publishedAt":1511},"Cloudflare Pages はもう Workers の中に住んでいる ― Static Assets 統合後の地図","/cloudflare-pages-to-workers-static-assets","2026-06-29T00:00:00.000Z",{"title":1513,"path":1514,"publishedAt":1515},"Cloudflare Pages の 1MB Worker bundle 制限に当たって構成図A〜Dを書きながら設計判断を整理した","/cloudflare-pages-workers-bundle-architecture","2026-06-16T00:00:00.000Z",{"title":1517,"path":1518,"publishedAt":1519},"Cloudflare Pages SSG の OOM を Excel 教材データ分離で根本対応した話 — Codex 再帰レビューと SSR fetch 404 の突破","/excel-data-separation-cloudflare-ssg-oom","2026-05-10T00:00:00.000Z",{"title":1521,"path":1522,"publishedAt":1523},"Nuxt SSGビルドエラーを3つ潰して本番デプロイを復旧した","/nuxt-ssg-build-fix-2026-03-05","2026-03-05T00:00:00.000Z","https://log.eurekapu.com/og/blog/cloudflare-pages-reload-404-fix.png?v=2025-11-27T00%3A00%3A00.000Z&title=Cloudflare%20Pages%E3%81%A7%E3%83%AA%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E3%81%A8Nuxt%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%8C404%E3%81%AB%E3%81%AA%E3%82%8B%E5%95%8F%E9%A1%8C%E3%81%AE%E8%AA%BF%E6%9F%BB%E3%81%A8%E8%A7%A3%E6%B1%BA&author=Kei%20Komatsu&sig=2bf4eff15cf57458",1785654664656]