Duplicate content and no default Next JS redirect from trailing slash

I have deployed next.js 11.1.0 test site and noticed that the redirect from trailing slash is not functional.

Both URLs load creating duplicate content and a major SEO issue.

https://cranky-ramanujan-052eb9.netlify.app/templates
https://cranky-ramanujan-052eb9.netlify.app/templates/

Default next.js behavior is to remove trailing slash. For example “/templates/” should redirect to “/templates”.

It tested as expected on localhost and vercel server.

I tried to set trailingSlash: false and used Pretty URLs netlify settings without luck. Please let me know how to make netlify support the default Next.js functionality.

Hi there, @cmsbased :wave:

Welcome to the Netlify Forums! Sorry to hear you are having difficulties, and thanks for sharing some of the steps you have already taken. Would you mind sharing your repo with us, as well as your most recent deploy log? Thanks in advance!

The repo is private so I just deployed strapi corporate starter in public repo:

Same problem replicated via URLs below:


7:50:55 PM: Build ready to start
7:50:57 PM: build-image version: fa439ad1ab9393b2c0d449d8d7c033927683f4b0
7:50:57 PM: build-image tag: v4.3.0
7:50:57 PM: buildbot version: 1ed4041128c7c024b4c4b72e2ad30a0740c570a7
7:50:57 PM: Fetching cached dependencies
7:50:57 PM: Failed to fetch cache, continuing with build
7:50:57 PM: Starting to prepare the repo for build
7:50:57 PM: No cached dependencies found. Cloning fresh repo
7:50:57 PM: git clone https://github.com/cmsbased/my-project
7:50:58 PM: Preparing Git Reference refs/heads/main
7:50:58 PM: Parsing package.json dependencies
7:50:59 PM: Starting build script
7:50:59 PM: Installing dependencies
7:50:59 PM: Python version set to 2.7
7:50:59 PM: Downloading and installing node v16.8.0...
7:51:00 PM: Downloading https://nodejs.org/dist/v16.8.0/node-v16.8.0-linux-x64.tar.xz...
7:51:00 PM: Computing checksum with sha256sum
7:51:00 PM: Checksums matched!
7:51:03 PM: Now using node v16.8.0 (npm v7.21.0)
7:51:03 PM: Started restoring cached build plugins
7:51:03 PM: Finished restoring cached build plugins
7:51:03 PM: Attempting ruby version 2.7.2, read from environment
7:51:04 PM: Using ruby version 2.7.2
7:51:05 PM: Using PHP version 8.0
7:51:05 PM: Started restoring cached yarn cache
7:51:05 PM: Finished restoring cached yarn cache
7:51:05 PM: Installing yarn at version 1.22.10
7:51:05 PM: Installing Yarn!
7:51:05 PM: > Downloading tarball...
7:51:05 PM: [1/2]: https://yarnpkg.com/downloads/1.22.10/yarn-v1.22.10.tar.gz --> /tmp/yarn.tar.gz.Si1W9QQiOM
7:51:05 PM:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
7:51:05 PM:                                  Dload  Upload   Total   Spent    Left  Speed
7:51:05 PM:   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
7:51:05 PM:   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
7:51:05 PM: 100    81  100    81    0     0    473      0 --:--:-- --:--:-- --:--:--   470
7:51:05 PM: 100    95  100    95    0     0    226      0 --:--:-- --:--:-- --:--:--   226
7:51:05 PM: 100   626  100   626    0     0   1201      0 --:--:-- --:--:-- --:--:--  1201
7:51:05 PM: 100 1215k  100 1215k    0     0  1939k      0 --:--:-- --:--:-- --:--:-- 1939k
7:51:05 PM: [2/2]: https://yarnpkg.com/downloads/1.22.10/yarn-v1.22.10.tar.gz.asc --> /tmp/yarn.tar.gz.Si1W9QQiOM.asc
7:51:05 PM:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
7:51:05 PM:                                  Dload  Upload   Total   Spent    Left  Speed
7:51:05 PM:   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
7:51:05 PM: 100    85  100    85    0     0   1250      0 --:--:-- --:--:-- --:--:--  1250
7:51:05 PM: 100    99  100    99    0     0   1020      0 --:--:-- --:--:-- --:--:--  1020
7:51:05 PM: 100   630  100   630    0     0   5080      0 --:--:-- --:--:-- --:--:--  5080
7:51:05 PM: 100   832  100   832    0     0   5985      0 --:--:-- --:--:-- --:--:--  5985
7:51:05 PM: > Verifying integrity...
7:51:05 PM: gpg: Signature made Fri 02 Oct 2020 11:17:27 AM UTC
7:51:05 PM: gpg:                using RSA key 6D98490C6F1ACDDD448E45954F77679369475BAA
7:51:05 PM: gpg: Good signature from "Yarn Packaging <yarn@dan.cx>" [unknown]
7:51:05 PM: gpg: WARNING: This key is not certified with a trusted signature!
7:51:05 PM: gpg:          There is no indication that the signature belongs to the owner.
7:51:05 PM: Primary key fingerprint: 72EC F46A 56B4 AD39 C907  BBB7 1646 B01B 86E5 0310
7:51:05 PM:      Subkey fingerprint: 6D98 490C 6F1A CDDD 448E  4595 4F77 6793 6947 5BAA
7:51:05 PM: > GPG signature looks good
7:51:05 PM: > Extracting to ~/.yarn...
7:51:05 PM: > Adding to $PATH...
7:51:06 PM: > Successfully installed Yarn 1.22.10! Please open another terminal where the `yarn` command will now be available.
7:51:06 PM: No yarn workspaces detected
7:51:06 PM: Started restoring cached node modules
7:51:06 PM: Finished restoring cached node modules
7:51:07 PM: Installing NPM modules using Yarn version 1.22.10
7:51:07 PM: yarn install v1.22.10
7:51:07 PM: warning package.json: No license field
7:51:07 PM: warning cms-strapi@1.0.0: No license field
7:51:07 PM: [1/4] Resolving packages...
7:51:08 PM: [2/4] Fetching packages...
7:51:26 PM: info @next/swc-darwin-arm64@11.1.2: The platform "linux" is incompatible with this module.
7:51:26 PM: info "@next/swc-darwin-arm64@11.1.2" is an optional dependency and failed compatibility check. Excluding it from installation.
7:51:26 PM: info @next/swc-darwin-arm64@11.1.2: The CPU architecture "x64" is incompatible with this module.
7:51:26 PM: info @next/swc-darwin-x64@11.1.2: The platform "linux" is incompatible with this module.
7:51:26 PM: info "@next/swc-darwin-x64@11.1.2" is an optional dependency and failed compatibility check. Excluding it from installation.
7:51:26 PM: info @next/swc-win32-x64-msvc@11.1.2: The platform "linux" is incompatible with this module.
7:51:26 PM: info "@next/swc-win32-x64-msvc@11.1.2" is an optional dependency and failed compatibility check. Excluding it from installation.
7:51:26 PM: info fsevents@2.3.2: The platform "linux" is incompatible with this module.
7:51:26 PM: info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
7:51:26 PM: [3/4] Linking dependencies...
7:51:26 PM: warning "next > styled-jsx > @babel/plugin-syntax-jsx@7.14.5" has unmet peer dependency "@babel/core@^7.0.0-0".
7:51:26 PM: warning " > react-markdown@7.0.1" has unmet peer dependency "@types/react@>=16".
7:51:26 PM: warning "eslint-config-next > @typescript-eslint/parser > @typescript-eslint/typescript-estree > tsutils@3.21.0" has unmet peer dependency "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta".
7:51:33 PM: [4/4] Building fresh packages...
7:51:34 PM: Done in 26.33s.
7:51:34 PM: NPM modules installed using Yarn
7:51:34 PM: warning package.json: No license field
7:51:34 PM: Started restoring cached go cache
7:51:34 PM: Finished restoring cached go cache
7:51:34 PM: go version go1.16.5 linux/amd64
7:51:34 PM: go version go1.16.5 linux/amd64
7:51:34 PM: Installing missing commands
7:51:34 PM: Verify run directory
7:51:35 PM: ​
7:51:35 PM: ────────────────────────────────────────────────────────────────
7:51:35 PM:   Netlify Build                                                 
7:51:35 PM: ────────────────────────────────────────────────────────────────
7:51:35 PM: ​
7:51:35 PM: ❯ Version
7:51:35 PM:   @netlify/build 18.7.3
7:51:35 PM: ​
7:51:35 PM: ❯ Flags
7:51:35 PM:   baseRelDir: true
7:51:35 PM:   buildId: 6131635fc1b1e500087a4cf1
7:51:35 PM:   deployId: 6131635fc1b1e500087a4cf3
7:51:35 PM: ​
7:51:35 PM: ❯ Current directory
7:51:35 PM:   /opt/build/repo
7:51:35 PM: ​
7:51:35 PM: ❯ Config file
7:51:35 PM:   No config file was defined: using default values.
7:51:35 PM: ​
7:51:35 PM: ❯ Context
7:51:35 PM:   production
7:51:35 PM: ​
7:51:35 PM: ❯ Installing plugins
7:51:35 PM:    - @netlify/plugin-nextjs@3.9.0
7:51:47 PM: ​
7:51:47 PM: ❯ Loading plugins
7:51:47 PM:    - @netlify/plugin-nextjs@3.9.0 from Netlify app
7:51:47 PM: ​
7:51:47 PM: ────────────────────────────────────────────────────────────────
7:51:47 PM:   1. onPreBuild command from @netlify/plugin-nextjs             
7:51:47 PM: ────────────────────────────────────────────────────────────────
7:51:47 PM: ​
7:51:47 PM: Using Next.js 11.1.2
7:51:47 PM: Warning: support for Next.js >=11.1.0 is experimental
7:51:47 PM: info  - Loaded env from /opt/build/repo/.env
7:51:47 PM: info  - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
7:51:48 PM: The "target" config property must be one of "serverless", "experimental-serverless-trace". Building with "serverless" target.
7:51:48 PM: info  - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
7:51:48 PM: No Next.js cache to restore.
7:51:48 PM: ​
7:51:48 PM: (@netlify/plugin-nextjs onPreBuild completed in 1s)
7:51:48 PM: ​
7:51:48 PM: ────────────────────────────────────────────────────────────────
7:51:48 PM:   2. Build command from Netlify app                             
7:51:48 PM: ────────────────────────────────────────────────────────────────
7:51:48 PM: ​
7:51:48 PM: $ yarn build
7:51:48 PM: yarn run v1.22.10
7:51:48 PM: warning package.json: No license field
7:51:48 PM: $ next build
7:51:49 PM: info  - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
7:51:50 PM: info  - Checking validity of types...
7:51:54 PM: info  - Creating an optimized production build...
7:52:01 PM: warn - You have enabled the JIT engine which is currently in preview.
7:52:01 PM: warn - Preview features are not covered by semver, may introduce breaking changes, and can change at any time.
7:52:22 PM: (node:1721) [DEP_WEBPACK_CHUNK_HAS_ENTRY_MODULE] DeprecationWarning: Chunk.hasEntryModule: Use new ChunkGraph API
7:52:22 PM: (Use `node --trace-deprecation ...` to show where the warning was created)
7:52:24 PM: warn  - Compiled with warnings
7:52:24 PM: ./node_modules/next/dist/server/load-components.js
7:52:24 PM: Critical dependency: the request of a dependency is an expression
7:52:24 PM: ./node_modules/next/dist/server/load-components.js
7:52:24 PM: Critical dependency: the request of a dependency is an expression
7:52:24 PM: ./node_modules/next/dist/server/load-components.js
7:52:24 PM: Critical dependency: the request of a dependency is an expression
7:52:24 PM: ./node_modules/next/dist/server/require.js
7:52:24 PM: Critical dependency: the request of a dependency is an expression
7:52:24 PM: ./node_modules/next/dist/server/require.js
7:52:24 PM: Critical dependency: the request of a dependency is an expression
7:52:24 PM: ./node_modules/next/dist/server/require.js
7:52:24 PM: Critical dependency: the request of a dependency is an expression
7:52:24 PM: info  - Collecting page data...
7:52:26 PM: Warning: You have opted-out of Automatic Static Optimization due to `getInitialProps` in `pages/_app`. This does not opt-out pages with `getStaticProps`
7:52:26 PM: Read more: https://nextjs.org/docs/messages/opt-out-auto-static-optimization
7:52:26 PM: info  - Generating static pages (0/10)
7:52:28 PM: info  - Generating static pages (2/10)
7:52:29 PM: info  - Generating static pages (4/10)
7:52:29 PM: info  - Generating static pages (7/10)
7:52:29 PM: info  - Generating static pages (10/10)
7:52:29 PM: info  - Finalizing page optimization...
7:52:29 PM: Page                              Size     First Load JS
7:52:29 PM: ┌   /_app                         0 B            72.2 kB
7:52:29 PM: ├ ● /[[...slug]] (13983 ms)       72.5 kB         145 kB
7:52:29 PM: ├   ├ /en/pricing (2249 ms)
7:52:29 PM: ├   ├ /en (2248 ms)
7:52:29 PM: ├   ├ /fr (2150 ms)
7:52:29 PM: ├   ├ /en/secret (1941 ms)
7:52:29 PM: ├   ├ /fr/secret (1902 ms)
7:52:29 PM: ├   ├ /en/contact (1475 ms)
7:52:29 PM: ├   ├ /fr/contact (1055 ms)
7:52:29 PM: ├   └ /fr/pricing (963 ms)
7:52:29 PM: ├ λ /404                          194 B          72.4 kB
7:52:29 PM: ├ λ /api/exit-preview             0 B            72.2 kB
7:52:29 PM: └ λ /api/preview                  0 B            72.2 kB
7:52:29 PM: + First Load JS shared by all     72.2 kB
7:52:29 PM:   ├ chunks/framework.2191d1.js    42.4 kB
7:52:29 PM:   ├ chunks/main.6c72f1.js         24.4 kB
7:52:29 PM:   ├ chunks/pages/_app.579269.js   4.47 kB
7:52:29 PM:   ├ chunks/webpack.0e3c27.js      883 B
7:52:29 PM:   └ css/05ba8dff33cff0cebb35.css  4.98 kB
7:52:29 PM: λ  (Lambda)  server-side renders at runtime (uses getInitialProps or getServerSideProps)
7:52:29 PM: ○  (Static)  automatically rendered as static HTML (uses no initial props)
7:52:29 PM: ●  (SSG)     automatically generated as static HTML + JSON (uses getStaticProps)
7:52:29 PM:    (ISR)     incremental static regeneration (uses revalidate in getStaticProps)
7:52:29 PM: Done in 40.76s.
7:52:29 PM: ​
7:52:29 PM: (build.command completed in 40.9s)
7:52:29 PM: ​
7:52:29 PM: ────────────────────────────────────────────────────────────────
7:52:29 PM:   3. onBuild command from @netlify/plugin-nextjs                
7:52:29 PM: ────────────────────────────────────────────────────────────────
7:52:29 PM: ​
7:52:29 PM: Detected Next.js site. Copying files...
7:52:29 PM: ** Running Next on Netlify package **
7:52:29 PM: 🚀 Next on Netlify 🚀
7:52:29 PM: 🌍️ Copying public folder to /opt/build/repo/out
7:52:29 PM: 💼 Copying static NextJS assets to /opt/build/repo/out
7:52:29 PM: 💫 Setting up API endpoints as Netlify Functions in /opt/build/repo/.netlify/functions-internal
7:52:29 PM: 💫 Setting up pages with getInitialProps as Netlify Functions in /opt/build/repo/.netlify/functions-internal
7:52:29 PM: 💫 Setting up pages with getServerSideProps as Netlify Functions in /opt/build/repo/.netlify/functions-internal
7:52:29 PM: 🔥 Copying pre-rendered pages with getStaticProps and JSON data to /opt/build/repo/out
7:52:29 PM: 💫 Setting up pages with getStaticProps and fallback: true as Netlify Functions in /opt/build/repo/.netlify/functions-internal
7:52:29 PM: 💫 Setting up pages with getStaticProps and revalidation interval as Netlify Functions in /opt/build/repo/.netlify/functions-internal
7:52:29 PM: 🔥 Copying pre-rendered pages without props to /opt/build/repo/out
7:52:29 PM: Building 20 pages
7:52:29 PM: 🔀 Setting up redirects
7:52:29 PM: 🔀 Setting up headers
7:52:29 PM: ✅ Success! All done!
7:52:29 PM: ​
7:52:29 PM: (@netlify/plugin-nextjs onBuild completed in 91ms)
7:52:29 PM: ​
7:52:29 PM: ────────────────────────────────────────────────────────────────
7:52:29 PM:   4. Functions bundling                                         
7:52:29 PM: ────────────────────────────────────────────────────────────────
7:52:29 PM: ​
7:52:29 PM: Packaging Functions from .netlify/functions-internal directory:
7:52:29 PM:  - next_api_exitpreview/next_api_exitpreview.js
7:52:29 PM:  - next_api_preview/next_api_preview.js
7:52:29 PM:  - next_image/next_image.js
7:52:29 PM:  - next_slug/next_slug.js
7:52:29 PM:  - preview-next_slug/preview-next_slug.js
7:52:29 PM: ​
7:53:00 PM: ​
7:53:00 PM: (Functions bundling completed in 30.5s)
7:53:00 PM: ​
7:53:00 PM: ────────────────────────────────────────────────────────────────
7:53:00 PM:   5. onPostBuild command from @netlify/plugin-nextjs            
7:53:00 PM: ────────────────────────────────────────────────────────────────
7:53:00 PM: ​
7:53:00 PM: Next.js cache saved.
7:53:00 PM: 
7:53:00 PM: For faster deploy times, build IDs should be set to a static value.
7:53:00 PM: To do this, set generateBuildId: () => 'build' in your next.config.js
7:53:00 PM: ​
7:53:00 PM: (@netlify/plugin-nextjs onPostBuild completed in 171ms)
7:53:00 PM: ​
7:53:00 PM: ────────────────────────────────────────────────────────────────
7:53:00 PM:   6. Deploy site                                                
7:53:00 PM: ────────────────────────────────────────────────────────────────
7:53:00 PM: ​
7:53:00 PM: Starting to deploy site from 'out'
7:53:00 PM: Creating deploy tree 
7:53:00 PM: Creating deploy upload records
7:53:01 PM: 23 new files to upload
7:53:01 PM: 5 new functions to upload
7:53:05 PM: Site deploy was successfully initiated
7:53:05 PM: ​
7:53:05 PM: (Deploy site completed in 5.4s)
7:53:05 PM: ​
7:53:05 PM: ────────────────────────────────────────────────────────────────
7:53:05 PM:   Netlify Build Complete                                        
7:53:05 PM: ────────────────────────────────────────────────────────────────
7:53:05 PM: ​
7:53:05 PM: (Netlify Build completed in 1m 30.3s)
7:53:05 PM: Starting post processing
7:53:06 PM: Post processing - HTML
7:53:06 PM: Mixed content detected in: /en/secret.html
7:53:06 PM: --> insecure link urls:
7:53:06 PM:   - http://35.140.3.160:1337/uploads/favicon_6f5adbecbf.png
7:53:06 PM: Caching artifacts
7:53:06 PM: Started saving node modules
7:53:06 PM: Finished saving node modules
7:53:06 PM: Started saving build plugins
7:53:06 PM: Finished saving build plugins
7:53:06 PM: Started saving yarn cache
7:53:06 PM: Mixed content detected in: /fr/secret.html
7:53:06 PM: --> insecure link urls:
7:53:06 PM:   - http://35.140.3.160:1337/uploads/favicon_b914a1f8da.png
7:53:06 PM: Mixed content detected in: /en/contact.html
7:53:06 PM: --> insecure link urls:
7:53:06 PM:   - http://35.140.3.160:1337/uploads/favicon_6f5adbecbf.png
7:53:06 PM: --> insecure img urls:
7:53:06 PM:   - http://35.140.3.160:1337/uploads/logo_19685c6bbf.png 1x, http://35.140.3.160:1337/uploads/logo_19685c6bbf.png 2x
7:53:06 PM:   - http://35.140.3.160:1337/uploads/logo_19685c6bbf.png
7:53:06 PM:   - http://35.140.3.160:1337/uploads/logo_b528d87217.png 1x, http://35.140.3.160:1337/uploads/logo_b528d87217.png 2x
7:53:06 PM:   - http://35.140.3.160:1337/uploads/logo_b528d87217.png
7:53:06 PM: Mixed content detected in: /fr/contact.html
7:53:06 PM: --> insecure link urls:
7:53:06 PM:   - http://35.140.3.160:1337/uploads/favicon_b914a1f8da.png
7:53:06 PM: --> insecure img urls:
7:53:06 PM:   - http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png 1x, http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png 2x
7:53:06 PM:   - http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png 1x, http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png 2x
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png
7:53:07 PM: Mixed content detected in: /en/pricing.html
7:53:07 PM: --> insecure link urls:
7:53:07 PM:   - http://35.140.3.160:1337/uploads/favicon_6f5adbecbf.png
7:53:07 PM: --> insecure img urls:
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_19685c6bbf.png 1x, http://35.140.3.160:1337/uploads/logo_19685c6bbf.png 2x
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_19685c6bbf.png
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_b528d87217.png 1x, http://35.140.3.160:1337/uploads/logo_b528d87217.png 2x
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_b528d87217.png
7:53:07 PM: Mixed content detected in: /fr/pricing.html
7:53:07 PM: --> insecure link urls:
7:53:07 PM:   - http://35.140.3.160:1337/uploads/favicon_b914a1f8da.png
7:53:07 PM: --> insecure img urls:
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png 1x, http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png 2x
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png 1x, http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png 2x
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png
7:53:07 PM: Mixed content detected in: /en.html
7:53:07 PM: --> insecure link urls:
7:53:07 PM:   - http://35.140.3.160:1337/uploads/favicon_6f5adbecbf.png
7:53:07 PM: --> insecure img urls:
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_19685c6bbf.png 1x, http://35.140.3.160:1337/uploads/logo_19685c6bbf.png 2x
7:53:07 PM:   - http://35.140.3.160:1337/uploads/logo_19685c6bbf.png
7:53:07 PM:   - http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 640w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 750w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 828w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 1080w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 1200w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 1920w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 2048w, http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg 3840w
7:53:07 PM:   - http://35.140.3.160:1337/uploads/undraw_content_team_996c08abf3.svg
7:53:07 PM:   - http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 640w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 750w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 828w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 1080w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 1200w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 1920w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 2048w, http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg 3840w
7:53:07 PM:   - http://35.140.3.160:1337/uploads/undraw_design_page_7e24fe51c1.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 640w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 750w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 828w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 1080w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 1200w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 1920w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 2048w, http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_create_page_cc1997aba0.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 640w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 750w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 828w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 1080w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 1200w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 1920w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 2048w, http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/preview_60bc5b7223.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 640w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 750w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 828w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 1080w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 1200w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 1920w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 2048w, http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/devices_aaaa8ee60f.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 640w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 750w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 828w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 1080w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 1200w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 1920w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 2048w, http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/palette_05bcec4ca8.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/user_06348501b9.png 640w, http://35.140.3.160:1337/uploads/user_06348501b9.png 750w, http://35.140.3.160:1337/uploads/user_06348501b9.png 828w, http://35.140.3.160:1337/uploads/user_06348501b9.png 1080w, http://35.140.3.160:1337/uploads/user_06348501b9.png 1200w, http://35.140.3.160:1337/uploads/user_06348501b9.png 1920w, http://35.140.3.160:1337/uploads/user_06348501b9.png 2048w, http://35.140.3.160:1337/uploads/user_06348501b9.png 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/user_06348501b9.png
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_079b6a4326.png 1x, http://35.140.3.160:1337/uploads/logo_079b6a4326.png 2x
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_079b6a4326.png
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_b461e70424.png 1x, http://35.140.3.160:1337/uploads/logo_b461e70424.png 2x
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_b461e70424.png
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_2292c06461.png 1x, http://35.140.3.160:1337/uploads/logo_2292c06461.png 2x
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_2292c06461.png
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_47674e0381.png 1x, http://35.140.3.160:1337/uploads/logo_47674e0381.png 2x
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_47674e0381.png
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_b528d87217.png 1x, http://35.140.3.160:1337/uploads/logo_b528d87217.png 2x
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_b528d87217.png
7:53:08 PM: Mixed content detected in: /fr.html
7:53:08 PM: --> insecure link urls:
7:53:08 PM:   - http://35.140.3.160:1337/uploads/favicon_b914a1f8da.png
7:53:08 PM: --> insecure img urls:
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png 1x, http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png 2x
7:53:08 PM:   - http://35.140.3.160:1337/uploads/logo_ddcb81e1f1.png
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 640w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 750w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 828w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 1080w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 1200w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 1920w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 2048w, http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_content_team_e1aec6fccb.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 640w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 750w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 828w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 1080w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 1200w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 1920w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 2048w, http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg 3840w
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_design_page_5648ce5e06.svg
7:53:08 PM:   - http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 640w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 750w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 828w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 1080w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 1200w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 1920w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 2048w, http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg 3840w
7:53:09 PM:   - http://35.140.3.160:1337/uploads/undraw_create_page_148f12549b.svg
7:53:09 PM:   - http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 640w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 750w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 828w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 1080w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 1200w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 1920w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 2048w, http://35.140.3.160:1337/uploads/preview_0535aa5466.svg 3840w
7:53:09 PM:   - http://35.140.3.160:1337/uploads/preview_0535aa5466.svg
7:53:09 PM:   - http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 640w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 750w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 828w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 1080w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 1200w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 1920w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 2048w, http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg 3840w
7:53:09 PM:   - http://35.140.3.160:1337/uploads/devices_a64169e8fb.svg
7:53:09 PM:   - http://35.140.3.160:1337/uploads/palette_74571377f7.svg 640w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 750w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 828w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 1080w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 1200w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 1920w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 2048w, http://35.140.3.160:1337/uploads/palette_74571377f7.svg 3840w
7:53:09 PM:   - http://35.140.3.160:1337/uploads/palette_74571377f7.svg
7:53:09 PM:   - http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 640w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 750w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 828w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 1080w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 1200w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 1920w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 2048w, http://35.140.3.160:1337/uploads/user_38e0a07d0e.png 3840w
7:53:09 PM:   - http://35.140.3.160:1337/uploads/user_38e0a07d0e.png
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_f3c6db9c2c.png 1x, http://35.140.3.160:1337/uploads/logo_f3c6db9c2c.png 2x
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_f3c6db9c2c.png
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_5436ceb735.png 1x, http://35.140.3.160:1337/uploads/logo_5436ceb735.png 2x
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_5436ceb735.png
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_021ad8794f.png 1x, http://35.140.3.160:1337/uploads/logo_021ad8794f.png 2x
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_021ad8794f.png
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_11e12a4a1d.png 1x, http://35.140.3.160:1337/uploads/logo_11e12a4a1d.png 2x
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_11e12a4a1d.png
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png 1x, http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png 2x
7:53:09 PM: Finished saving yarn cache
7:53:09 PM:   - http://35.140.3.160:1337/uploads/logo_3f32ef8a1c.png
7:53:09 PM: Started saving pip cache
7:53:09 PM: Finished saving pip cache
7:53:09 PM: Started saving emacs cask dependencies
7:53:09 PM: Post processing - header rules
7:53:09 PM: Finished saving emacs cask dependencies
7:53:09 PM: Started saving maven dependencies
7:53:09 PM: Finished saving maven dependencies
7:53:09 PM: Started saving boot dependencies
7:53:09 PM: Post processing - redirect rules
7:53:09 PM: Finished saving boot dependencies
7:53:09 PM: Started saving rust rustup cache
7:53:09 PM: Finished saving rust rustup cache
7:53:09 PM: Started saving go dependencies
7:53:09 PM: Finished saving go dependencies
7:53:09 PM: Post processing done
7:53:10 PM: Site is live ✨
7:53:12 PM: Build script success
7:54:04 PM: Finished processing build request in 3m7.167290293s

Hi @cmsbased,

Does this give you any insights:

Hi. It is not about my target site or SEO. It is all about default Netlify behavior. Vercel and localhost redirect, while netlify loads a duplicate set of content. If I deploy the default next.js starter app, redirect works as expected on Netlify. Not the case with strapi starter. I suspect there is something going on with dynamic routes or third party packages. Either way, you have room for extra improvement of Next.JS compatibility. I would also really appreciate a workaround.

I have just also realized that there are i18n locales defined in Strapi starter, so this could be the first place to look for Netlify incompatibilities .

In that case, wouldn’t that indicate something wrong with the configuration or something for that starter?

I’m sorry, I’m not a NextJS expert, so making random guesses here.

It works as expected on localhost and vercel servers. It only fails to work properly on Netlify.

Hi there, @cmsbased :wave:

I want to assure you we haven’t forgotten about your questions. I am meeting with members of our team who specialize in Nextjs tomorrow, so I will bring your questions to them so that they can dive in further. Thanks for your patience, and stay tuned!

Hey there, @cmsbased :wave:

Thanks for your patience here while I spoke with the Support team as well as our NextJs experts.

I fully hear how this is an obstacle for you in terms of your SEO. We have an open feature request to improve trailing slash handling, but unfortunately we cannot offer you a workaround at the moment. Should there be movement on the feature request, we will follow up on this thread to update you.

hi. it is updated?
It works as expected on localhost and vercel servers.

Hey there, @Bilegt :wave:

Unfortunately, I do not have an update for you at this time. Thanks for your patience.

On Vercel trailing slashes are easily removed and the redirection is done automatically
But on Netlify trailing slashes are not removed and any content with both trailing slash or not trailing slash will be considered different by Google.

I suggest using Canonical tags so Google always knows the source of truth

But I have also been able to force all links to have a trailing slash or to not have a trailing slash. Dependent on what you want by using these Netlify Edge Functions