Skip to content

Duplicated whole page when accessing site by your-domain.com/index.html #9916

Closed as not planned

Description

@DmitryKorlas

Have you read the Contributing Guidelines on issues?

Prerequisites

  • I'm using the latest version of Docusaurus.
  • I have tried the npm run clear or yarn clear command.
  • I have tried rm -rf node_modules yarn.lock package-lock.json and re-installing packages.
  • I have tried creating a repro with https://new.docusaurus.io.
  • I have read the console error message carefully (if applicable).

Description

Description

Accessing docusaurus build by direct URL domain.com/index.html causes a duplicated page issue.

It looks like shipped docusaurus serve CLI implements a redirect from index.html > /. And it is a specific logic which are not presented in http servers by default.

Background

I'm trying to migrate docusaurus 2.4.3>3.1.1 and faced an issues with merge-request integration in GitLab pipelines. GitLab pipeline produces a docusaurus build artifact which can be accessible by URL's like
some-domain.com/-/repoName/-/jobs/12345/artifacts/build/index.html.
Attempts to omit index.html part, i.e. some-domain.com/-/repoName/-/jobs/12345/artifacts/build/ caused of HTTP404 error. Probably it's possible to have a workaround fix by adjusting redirect rules for my case. Anyway, duplicated content behavior looks like a bug.

Reproducible demo

Steps to reproduce

  1. install from scratch
npx create-docusaurus@latest my-website classic --typescript
cd my-website/
npm install
npm run build
  1. run any http server to serve build over http (I'm using python http server to avoid side-effect redirects which shipped with docusaurus serve)
cd build
python3 -m http.server 9005 
  1. visit http://localhost:9005/index.html

Expected behavior

No duplicated content appears

Actual behavior

Whole site is rendered twice. Duplicated top-level menu and page content.

image
image

You can also observe this on https://docusaurus.io/index.html

image

Your environment

Self-service

  • I'd be willing to fix this bug myself.

Activity

  1. added
    bugAn error in the Docusaurus core causing instability or issues with its execution
    status: needs triageThis issue has not been triaged by maintainers
    on Mar 6, 2024
  2. slorber commented on Mar 6, 2024

    @slorber
    Collaborator

    This has already been discussed here:

    See my suggestions here: #9871 (comment)

    You should serve pages by their canonical URLs. By default, this means serving them without the .html extension.

    If this is a problem, there's often a "pretty URL" option on CDNs and static hosts you can turn on, otherwise you can use reverse proxy settings.

  3. added
    closed: duplicateThis issue or pull request already exists in another issue or pull request
    and removed
    status: needs triageThis issue has not been triaged by maintainers
    on Mar 6, 2024
  4. DmitryKorlas commented on Mar 6, 2024

    @DmitryKorlas
    Author

    Thanks for your response and valuable feedback! Maybe it would be helpful to mention about new behavior at the migration guides. I followed the instructions step by step, but this behavior was unexpected.

  5. DmitryKorlas commented on Mar 7, 2024

    @DmitryKorlas
    Author

    Regarding my specific case with GitLab artifacts deployment for merge requests, I couldn't find the ability to implement a redirect on the GitLab side. GitLab integration requires an index.html file for viewing artifacts of MR.

    I added a workaround trick to replace the URL on the client side. It looks messy, and I don't like it, but it resolved the issue. Perhaps it can be helpful to someone else:

    // docusaurus.config.ts
    import type {Config, HtmlTagObject} from '@docusaurus/types';
    
    // see https://github.com/facebook/docusaurus/issues/9916
    const redirect = `
    (function() {
      var pathname = window.location.pathname;
      if (pathname.endsWith('index.html')) {
        history.replaceState(
          null,
          pathname,
          pathname.replace('index.html', '')
        );
      }
    })();
    `.replace(/\n/g, '');
    
    const config: Config = {
      // ...
      headTags: [
        {
          tagName: 'script',
          attributes: {
            src: 'data:text/javascript,' + redirect,
          },
        },
      ] satisfies HtmlTagObject[],
    };
  6. slorber commented on Apr 19, 2024

    @slorber
    Collaborator

    We'll try to fix this for V4 in #10059

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugAn error in the Docusaurus core causing instability or issues with its executionclosed: duplicateThis issue or pull request already exists in another issue or pull request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions