Nathan Nguyen
1551f91cbd
fix(metadata): match Next dynamic route semantics ( #1317 )
...
* fix(metadata): match Next dynamic route semantics
Metadata routes diverged from Next.js in several observable cases: robots.txt emitted Sitemap before Host, dynamic metadata Response results could miss framework cache headers, TSX sitemap files were not discovered, and rendered metadata URLs treated canonical, manifest, and file-based social image routes as the same URL class.
The implementation now follows Next's metadata route extension, cache, robots, and URL resolution rules while keeping file-based social image route markers non-enumerable so resolved metadata shape does not leak internal state.
* fix(metadata): gate social image preview fallback
File-based social image routes used the preview deployment URL whenever VERCEL_URL was present outside development. That let deployment URLs override an explicit metadataBase in non-preview production environments.
Gate preview URL fallback on VERCEL_ENV=preview, add coverage for metadataBase precedence and production fallback URLs, and keep static metadata image cache headers stable in development.
2026-05-19 14:11:47 +01:00
..
2026-05-19 11:53:49 +01:00
2026-05-19 14:11:47 +01:00
2026-04-27 07:50:39 +01:00
2026-05-18 15:29:07 +01:00
2026-03-29 20:40:57 +01:00
2026-05-19 13:15:31 +01:00
2026-05-16 17:21:10 +01:00
2026-05-05 19:39:39 +01:00
2026-05-18 10:18:49 +01:00
2026-05-18 11:48:04 +01:00
2026-05-03 17:34:06 +01:00
2026-05-15 12:39:05 +01:00
2026-05-15 12:39:05 +01:00
2026-05-15 12:39:05 +01:00
2026-05-16 17:04:15 +00:00
2026-05-18 10:18:49 +01:00
2026-05-16 19:07:27 +01:00
2026-05-16 18:08:40 +01:00
2026-04-28 20:37:49 +01:00
2026-04-29 10:40:49 +01:00
2026-05-15 15:10:36 +01:00
2026-05-18 11:10:40 +01:00
2026-05-15 12:39:05 +01:00
2026-05-15 12:39:05 +01:00
2026-05-16 01:02:56 +01:00
2026-05-13 10:02:02 +01:00
2026-05-16 19:07:27 +01:00
2026-05-03 17:34:06 +01:00
2026-05-15 12:39:05 +01:00
2026-04-10 07:49:18 +01:00
2026-05-03 17:34:06 +01:00
2026-05-19 13:15:31 +01:00
2026-05-02 19:54:25 +01:00
2026-05-04 18:56:23 +01:00
2026-05-02 19:54:25 +01:00
2026-05-04 17:04:39 +01:00
2026-05-04 17:04:39 +01:00
2026-04-29 14:59:14 +01:00
2026-05-19 14:11:47 +01:00
2026-05-15 12:01:33 +01:00
2026-05-15 13:41:10 +00:00
2026-05-15 13:41:10 +00:00
2026-05-15 12:39:05 +01:00
2026-05-12 15:09:45 +01:00
2026-05-11 16:45:26 +01:00
2026-05-18 11:55:31 +01:00
2026-04-29 15:23:16 +00:00
2026-05-04 17:04:39 +01:00
2026-05-18 18:07:05 +01:00
2026-05-16 19:07:27 +01:00
2026-05-16 17:21:10 +01:00
2026-04-29 14:59:14 +01:00
2026-05-19 11:53:49 +01:00
2026-05-15 13:41:10 +00:00
2026-05-18 14:39:17 +01:00
2026-05-02 19:54:31 +00:00
2026-05-07 11:23:28 +00:00
2026-03-28 09:01:03 +00:00
2026-05-18 11:09:36 +01:00
2026-04-30 08:53:58 +01:00
2026-03-15 10:50:13 +00:00
2026-05-06 10:12:28 +01:00
2026-05-18 10:34:18 +01:00
2026-04-09 09:14:13 +01:00
2026-05-18 16:59:56 +01:00
2026-05-11 17:13:51 +01:00
2026-05-15 09:53:02 +01:00
2026-03-16 21:24:23 -05:00
2026-03-15 10:50:13 +00:00
2026-05-15 13:41:10 +00:00
2026-05-12 14:09:58 +01:00
2026-05-11 07:23:14 +00:00
2026-05-18 11:33:14 +01:00
2026-05-08 20:36:42 +00:00
2026-05-18 18:24:45 +01:00
2026-05-15 12:01:33 +01:00
2026-05-13 10:02:02 +01:00
2026-04-26 20:46:12 +01:00
2026-05-19 14:11:47 +01:00
2026-05-15 11:51:50 +01:00
2026-04-30 19:38:32 +01:00
2026-05-02 17:47:49 +01:00
2026-05-11 07:23:14 +00:00
2026-05-11 07:23:14 +00:00
2026-05-15 09:48:42 +01:00
2026-05-15 09:48:42 +01:00
2026-05-15 09:48:42 +01:00
2026-04-22 10:32:56 +01:00
2026-05-14 09:14:31 +01:00
2026-03-29 22:09:39 +01:00
2026-05-15 12:39:05 +01:00
2026-05-18 10:44:31 +01:00
2026-05-11 13:21:02 +01:00
2026-05-02 19:54:31 +00:00
2026-03-15 10:50:13 +00:00
2026-05-06 12:54:04 -05:00
2026-05-02 20:09:03 +01:00
2026-04-05 09:31:57 +00:00
2026-05-12 15:09:45 +01:00
2026-05-18 14:41:38 +01:00
2026-05-14 13:49:33 +01:00
2026-05-02 19:54:25 +01:00
2026-04-20 10:49:50 +01:00
2026-05-16 19:14:26 +00:00
2026-05-16 19:14:26 +00:00
2026-04-30 19:38:32 +01:00
2026-05-19 14:11:47 +01:00
2026-05-19 14:11:47 +01:00
2026-05-19 13:15:31 +01:00
2026-05-18 12:07:44 +01:00
2026-05-18 12:25:49 +01:00
2026-05-19 11:53:49 +01:00
2026-05-12 14:08:37 +01:00
2026-03-29 22:09:39 +01:00
2026-03-15 10:50:13 +00:00
2026-03-15 10:50:13 +00:00
2026-05-02 19:54:31 +00:00
2026-05-02 19:54:31 +00:00
2026-03-29 20:40:57 +01:00
2026-04-29 10:37:33 +01:00
2026-03-19 18:10:31 +00:00
2026-05-06 15:01:39 -05:00
2026-03-17 10:49:40 +00:00
2026-03-15 10:50:13 +00:00
2026-05-02 19:54:25 +01:00
2026-05-05 19:43:07 +01:00
2026-03-17 10:49:40 +00:00
2026-05-19 11:53:49 +01:00
2026-04-13 09:08:11 +00:00
2026-05-19 11:53:49 +01:00
2026-05-15 21:52:16 +00:00
2026-05-16 17:21:10 +01:00
2026-05-06 09:28:53 +01:00
2026-03-15 10:50:13 +00:00
2026-03-16 11:00:47 -05:00
2026-05-18 18:07:05 +01:00
2026-05-02 19:57:31 +01:00
2026-04-30 07:46:07 +01:00
2026-05-15 09:51:49 +00:00
2026-05-05 19:21:40 +01:00
2026-05-04 18:58:48 +01:00
2026-05-15 17:33:16 +01:00
2026-05-07 11:22:30 +01:00
2026-05-16 19:07:27 +01:00
2026-05-06 10:12:28 +01:00
2026-03-29 20:40:57 +01:00
2026-05-16 19:45:03 +01:00
2026-05-18 15:29:07 +01:00
2026-05-15 12:15:54 +01:00
2026-05-02 19:54:25 +01:00
2026-04-03 12:53:14 +01:00
2026-04-03 12:03:42 +01:00
2026-05-18 11:33:14 +01:00
2026-03-15 10:50:13 +00:00
2026-04-28 19:35:10 +01:00
2026-05-18 15:55:42 +01:00
2026-05-16 01:02:56 +01:00
2026-04-27 07:55:05 +01:00
2026-05-18 11:09:36 +01:00
2026-05-18 12:42:18 +01:00
2026-04-03 12:03:42 +01:00
2026-04-13 10:49:28 +01:00
2026-03-16 19:18:37 +00:00
2026-04-01 23:33:12 +01:00
2026-05-04 19:30:05 +01:00
2026-04-01 22:54:17 +01:00
2026-03-29 19:51:50 +01:00
2026-05-14 19:36:21 +01:00
2026-03-29 19:51:50 +01:00
2026-05-15 11:51:50 +01:00
2026-04-08 22:33:19 -05:00
2026-04-03 12:47:24 +01:00