diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js
index 38d2ee9c76..1d0080c55b 100644
--- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js
+++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.js
@@ -10,6 +10,7 @@ import classnames from 'classnames';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import useBaseUrl from '@docusaurus/useBaseUrl';
import Link from '@docusaurus/Link';
+import isInternalUrl from '@docusaurus/utils'; // eslint-disable-line import/no-extraneous-dependencies
import styles from './styles.module.css';
@@ -70,11 +71,18 @@ function DocSidebarItem({item, onItemClick, collapsible}) {
return (
+ {...(isInternalUrl(href)
+ ? {
+ activeClassName: 'menu__link--active',
+ exact: true,
+ onClick: onItemClick,
+ }
+ : {
+ target: '_blank',
+ rel: 'noreferrer noopener',
+ })}>
{label}
diff --git a/packages/docusaurus/src/client/exports/Link.js b/packages/docusaurus/src/client/exports/Link.js
index 9f40e95e5c..37cfd6cb91 100644
--- a/packages/docusaurus/src/client/exports/Link.js
+++ b/packages/docusaurus/src/client/exports/Link.js
@@ -7,13 +7,12 @@
import React, {useEffect, useRef} from 'react';
import {NavLink} from 'react-router-dom';
-
-const internalRegex = /^\/(?!\/)/;
+import isInternalUrl from '@docusaurus/utils';
function Link(props) {
const {to, href} = props;
const targetLink = to || href;
- const isInternal = internalRegex.test(targetLink);
+ const isInternal = isInternalUrl;
const preloaded = useRef(false);
const IOSupported =
diff --git a/packages/docusaurus/src/client/exports/utils.js b/packages/docusaurus/src/client/exports/utils.js
new file mode 100644
index 0000000000..74ed1a1177
--- /dev/null
+++ b/packages/docusaurus/src/client/exports/utils.js
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) 2017-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export default function isInternalUrl(url) {
+ return /^\/(?!\/)/.test(url);
+}