You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ur...@apache.org on 2022/06/23 05:11:29 UTC

[pulsar] branch fix/docs-path-with-md created (now 21af05db63a)

This is an automated email from the ASF dual-hosted git repository.

urfree pushed a change to branch fix/docs-path-with-md
in repository https://gitbox.apache.org/repos/asf/pulsar.git


      at 21af05db63a fix: docs 404 due to path missing .md

This branch includes the following new commits:

     new 21af05db63a fix: docs 404 due to path missing .md

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[pulsar] 01/01: fix: docs 404 due to path missing .md

Posted by ur...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

urfree pushed a commit to branch fix/docs-path-with-md
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 21af05db63a7307bdc405d6f623332b0d830a86d
Author: Li Li <ur...@apache.org>
AuthorDate: Thu Jun 23 13:11:14 2022 +0800

    fix: docs 404 due to path missing .md
    
    Signed-off-by: Li Li <ur...@apache.org>
---
 site2/docs/admin-api-brokers.md                      |  2 +-
 site2/docs/admin-api-clusters.md                     |  2 +-
 site2/docs/admin-api-namespaces.md                   |  2 +-
 site2/docs/concepts-overview.md                      | 16 ++++++++--------
 site2/docs/concepts-topic-compaction.md              |  2 +-
 site2/docs/deploy-bare-metal-multi-cluster.md        |  4 ++--
 site2/docs/deploy-bare-metal.md                      |  2 +-
 site2/docs/functions-debug.md                        | 10 +++++-----
 site2/docs/functions-develop.md                      | 18 +++++++++---------
 site2/docs/helm-overview.md                          |  4 ++--
 site2/docs/security-overview.md                      | 12 ++++++------
 site2/docs/security-tls-keystore.md                  |  2 +-
 site2/docs/security-token-admin.md                   |  2 +-
 site2/docs/standalone-docker.md                      |  2 +-
 .../version-2.1.0-incubating/admin-api-brokers.md    |  2 +-
 .../version-2.1.0-incubating/admin-api-clusters.md   |  2 +-
 .../version-2.1.0-incubating/admin-api-namespaces.md |  2 +-
 .../version-2.1.0-incubating/client-libraries.md     |  2 +-
 .../version-2.1.0-incubating/concepts-clients.md     |  2 +-
 .../version-2.1.0-incubating/concepts-messaging.md   |  4 ++--
 .../version-2.1.0-incubating/concepts-overview.md    | 20 ++++++++++----------
 .../concepts-topic-compaction.md                     |  2 +-
 .../deploy-bare-metal-multi-cluster.md               |  6 +++---
 .../version-2.1.0-incubating/deploy-bare-metal.md    |  2 +-
 .../version-2.1.0-incubating/deploy-kubernetes.md    |  8 ++++----
 .../version-2.1.0-incubating/deploy-monitoring.md    |  2 +-
 .../version-2.1.0-incubating/functions-api.md        |  2 +-
 .../version-2.1.0-incubating/functions-deploying.md  |  2 +-
 .../version-2.1.0-incubating/functions-quickstart.md |  4 ++--
 .../getting-started-docker.md                        |  2 +-
 .../getting-started-standalone.md                    |  6 +++---
 .../version-2.1.0-incubating/io-connectors.md        |  6 +++---
 .../version-2.1.0-incubating/io-overview.md          |  2 +-
 .../reference-configuration.md                       |  2 +-
 .../version-2.1.0-incubating/security-overview.md    | 10 +++++-----
 .../version-2.1.0-incubating/standalone.md           |  6 +++---
 .../version-2.1.1-incubating/admin-api-brokers.md    |  2 +-
 .../version-2.1.1-incubating/admin-api-clusters.md   |  2 +-
 .../version-2.1.1-incubating/admin-api-namespaces.md |  2 +-
 .../version-2.1.1-incubating/client-libraries.md     |  2 +-
 .../version-2.1.1-incubating/concepts-overview.md    | 16 ++++++++--------
 .../concepts-topic-compaction.md                     |  2 +-
 .../deploy-bare-metal-multi-cluster.md               |  4 ++--
 .../version-2.1.1-incubating/deploy-bare-metal.md    |  2 +-
 .../version-2.1.1-incubating/functions-api.md        |  2 +-
 .../version-2.1.1-incubating/functions-deploying.md  |  2 +-
 .../version-2.1.1-incubating/functions-quickstart.md |  4 ++--
 .../getting-started-docker.md                        |  2 +-
 .../getting-started-standalone.md                    |  6 +++---
 .../reference-configuration.md                       |  2 +-
 .../version-2.1.1-incubating/security-overview.md    | 10 +++++-----
 .../version-2.1.1-incubating/standalone.md           |  6 +++---
 .../version-2.10.0/admin-api-brokers.md              |  2 +-
 .../version-2.10.0/admin-api-clusters.md             |  2 +-
 .../version-2.10.0/admin-api-namespaces.md           |  2 +-
 .../version-2.10.0/concepts-overview.md              | 16 ++++++++--------
 .../version-2.10.0/concepts-topic-compaction.md      |  2 +-
 .../deploy-bare-metal-multi-cluster.md               |  4 ++--
 .../version-2.10.0/deploy-bare-metal.md              |  2 +-
 .../versioned_docs/version-2.10.0/helm-overview.md   |  4 ++--
 .../version-2.10.0/security-overview.md              | 12 ++++++------
 .../version-2.10.0/security-tls-keystore.md          |  2 +-
 .../version-2.10.0/security-token-admin.md           |  2 +-
 .../version-2.2.0/admin-api-brokers.md               |  2 +-
 .../version-2.2.0/admin-api-clusters.md              |  2 +-
 .../version-2.2.0/admin-api-namespaces.md            |  2 +-
 .../versioned_docs/version-2.2.0/client-libraries.md |  2 +-
 .../version-2.2.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.2.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.2.0/deploy-bare-metal-multi-cluster.md |  6 +++---
 .../version-2.2.0/deploy-bare-metal.md               |  4 ++--
 .../versioned_docs/version-2.2.0/functions-api.md    |  2 +-
 .../version-2.2.0/functions-deploying.md             |  2 +-
 .../version-2.2.0/functions-quickstart.md            |  4 ++--
 .../version-2.2.0/getting-started-docker.md          |  2 +-
 .../version-2.2.0/getting-started-standalone.md      |  8 ++++----
 .../versioned_docs/version-2.2.0/io-overview.md      |  2 +-
 .../version-2.2.0/reference-configuration.md         |  2 +-
 .../version-2.2.0/security-overview.md               | 10 +++++-----
 .../version-2.2.0/standalone-docker.md               |  2 +-
 .../versioned_docs/version-2.2.0/standalone.md       |  8 ++++----
 .../version-2.2.1/admin-api-brokers.md               |  2 +-
 .../version-2.2.1/admin-api-clusters.md              |  2 +-
 .../version-2.2.1/admin-api-namespaces.md            |  2 +-
 .../versioned_docs/version-2.2.1/concepts-clients.md |  2 +-
 .../version-2.2.1/concepts-overview.md               | 20 ++++++++++----------
 .../version-2.2.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.2.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.2.1/deploy-bare-metal.md               |  4 ++--
 .../version-2.2.1/getting-started-docker.md          |  2 +-
 .../version-2.2.1/getting-started-standalone.md      |  8 ++++----
 .../versioned_docs/version-2.2.1/io-connectors.md    |  8 ++++----
 .../versioned_docs/version-2.2.1/io-overview.md      |  2 +-
 .../version-2.2.1/reference-configuration.md         |  2 +-
 .../version-2.2.1/security-overview.md               | 10 +++++-----
 .../version-2.2.1/security-token-admin.md            |  2 +-
 .../version-2.2.1/standalone-docker.md               |  2 +-
 .../versioned_docs/version-2.2.1/standalone.md       |  8 ++++----
 .../version-2.3.0/admin-api-brokers.md               |  2 +-
 .../version-2.3.0/admin-api-clusters.md              |  2 +-
 .../version-2.3.0/admin-api-namespaces.md            |  2 +-
 .../version-2.3.0/concepts-messaging.md              |  4 ++--
 .../version-2.3.0/concepts-overview.md               | 20 ++++++++++----------
 .../version-2.3.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.3.0/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.3.0/deploy-bare-metal.md               |  4 ++--
 .../version-2.3.0/deploy-monitoring.md               |  2 +-
 .../version-2.3.0/functions-deploying.md             |  2 +-
 .../version-2.3.0/functions-quickstart.md            |  4 ++--
 .../version-2.3.0/getting-started-docker.md          |  2 +-
 .../version-2.3.0/getting-started-standalone.md      |  8 ++++----
 site2/website/versioned_docs/version-2.3.0/io-cdc.md |  4 ++--
 .../versioned_docs/version-2.3.0/io-connectors.md    |  8 ++++----
 .../version-2.3.0/reference-configuration.md         |  2 +-
 .../version-2.3.0/security-overview.md               | 10 +++++-----
 .../version-2.3.0/security-token-admin.md            |  2 +-
 .../version-2.3.0/standalone-docker.md               |  2 +-
 .../versioned_docs/version-2.3.0/standalone.md       |  8 ++++----
 .../version-2.3.1/admin-api-brokers.md               |  2 +-
 .../version-2.3.1/admin-api-clusters.md              |  2 +-
 .../version-2.3.1/admin-api-namespaces.md            |  2 +-
 .../version-2.3.1/concepts-messaging.md              |  4 ++--
 .../version-2.3.1/concepts-overview.md               | 18 +++++++++---------
 .../version-2.3.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.3.1/deploy-bare-metal-multi-cluster.md |  6 +++---
 .../version-2.3.1/deploy-bare-metal.md               |  4 ++--
 .../version-2.3.1/getting-started-docker.md          |  2 +-
 .../version-2.3.1/getting-started-standalone.md      |  8 ++++----
 .../versioned_docs/version-2.3.1/io-connectors.md    |  8 ++++----
 .../version-2.3.1/reference-configuration.md         |  2 +-
 .../version-2.3.1/security-overview.md               | 10 +++++-----
 .../version-2.3.1/security-token-admin.md            |  2 +-
 .../version-2.3.1/standalone-docker.md               |  2 +-
 .../versioned_docs/version-2.3.1/standalone.md       |  8 ++++----
 .../version-2.3.2/admin-api-brokers.md               |  2 +-
 .../version-2.3.2/admin-api-clusters.md              |  2 +-
 .../version-2.3.2/admin-api-namespaces.md            |  2 +-
 .../versioned_docs/version-2.3.2/concepts-clients.md |  2 +-
 .../version-2.3.2/concepts-messaging.md              |  4 ++--
 .../version-2.3.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.3.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.3.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.3.2/deploy-bare-metal.md               |  4 ++--
 .../version-2.3.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.3.2/io-connectors.md    |  8 ++++----
 .../version-2.3.2/reference-configuration.md         |  2 +-
 .../version-2.3.2/security-overview.md               | 14 +++++++-------
 .../version-2.3.2/security-token-admin.md            |  2 +-
 .../version-2.3.2/standalone-docker.md               |  2 +-
 .../version-2.4.0/admin-api-brokers.md               |  2 +-
 .../version-2.4.0/admin-api-clusters.md              |  2 +-
 .../version-2.4.0/admin-api-namespaces.md            |  2 +-
 .../version-2.4.0/concepts-messaging.md              |  4 ++--
 .../version-2.4.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.4.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.4.0/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.4.0/deploy-bare-metal.md               |  4 ++--
 .../versioned_docs/version-2.4.0/functions-api.md    |  2 +-
 .../version-2.4.0/getting-started-docker.md          |  2 +-
 .../version-2.4.0/reference-configuration.md         |  2 +-
 .../version-2.4.0/security-overview.md               | 16 ++++++++--------
 .../version-2.4.0/security-token-admin.md            |  2 +-
 .../version-2.4.0/standalone-docker.md               |  2 +-
 .../version-2.4.1/admin-api-brokers.md               |  2 +-
 .../version-2.4.1/admin-api-clusters.md              |  2 +-
 .../version-2.4.1/admin-api-namespaces.md            |  2 +-
 .../version-2.4.1/concepts-messaging.md              |  4 ++--
 .../version-2.4.1/concepts-overview.md               | 16 ++++++++--------
 .../version-2.4.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.4.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.4.1/deploy-bare-metal.md               |  4 ++--
 .../version-2.4.1/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.4.1/io-connectors.md    | 10 +++++-----
 .../version-2.4.1/reference-configuration.md         |  2 +-
 .../version-2.4.1/security-overview.md               | 16 ++++++++--------
 .../version-2.4.1/security-token-admin.md            |  2 +-
 .../version-2.4.1/standalone-docker.md               |  2 +-
 .../version-2.4.2/admin-api-brokers.md               |  2 +-
 .../version-2.4.2/admin-api-clusters.md              |  2 +-
 .../version-2.4.2/admin-api-namespaces.md            |  2 +-
 .../version-2.4.2/concepts-messaging.md              |  4 ++--
 .../version-2.4.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.4.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.4.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.4.2/deploy-bare-metal.md               |  4 ++--
 .../version-2.4.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.4.2/io-connectors.md    | 10 +++++-----
 .../version-2.4.2/reference-configuration.md         |  2 +-
 .../version-2.4.2/security-overview.md               | 16 ++++++++--------
 .../version-2.4.2/security-token-admin.md            |  2 +-
 .../version-2.4.2/standalone-docker.md               |  2 +-
 .../version-2.5.0/admin-api-brokers.md               |  2 +-
 .../version-2.5.0/admin-api-clusters.md              |  2 +-
 .../version-2.5.0/admin-api-namespaces.md            |  2 +-
 .../versioned_docs/version-2.5.0/concepts-clients.md |  2 +-
 .../version-2.5.0/concepts-messaging.md              |  4 ++--
 .../version-2.5.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.5.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.5.0/deploy-bare-metal-multi-cluster.md |  6 +++---
 .../version-2.5.0/deploy-bare-metal.md               |  4 ++--
 .../version-2.5.0/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.5.0/helm-overview.md    |  4 ++--
 .../versioned_docs/version-2.5.0/io-connectors.md    |  2 +-
 .../version-2.5.0/reference-configuration.md         |  2 +-
 .../version-2.5.0/security-overview.md               |  8 ++++----
 .../version-2.5.0/security-token-admin.md            |  2 +-
 .../version-2.5.0/standalone-docker.md               |  2 +-
 .../version-2.5.1/admin-api-brokers.md               |  2 +-
 .../version-2.5.1/admin-api-clusters.md              |  2 +-
 .../version-2.5.1/admin-api-namespaces.md            |  2 +-
 .../version-2.5.1/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.5.1/client-libraries.md | 12 ++++++------
 .../version-2.5.1/concepts-overview.md               | 16 ++++++++--------
 .../version-2.5.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.5.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.5.1/deploy-bare-metal.md               |  4 ++--
 .../version-2.5.1/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.5.1/helm-overview.md    |  4 ++--
 .../version-2.5.1/reference-configuration.md         |  2 +-
 .../version-2.5.1/security-overview.md               | 10 +++++-----
 .../version-2.5.2/admin-api-brokers.md               |  2 +-
 .../version-2.5.2/admin-api-clusters.md              |  2 +-
 .../version-2.5.2/admin-api-namespaces.md            |  2 +-
 .../version-2.5.2/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.5.2/client-libraries.md | 12 ++++++------
 .../version-2.5.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.5.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.5.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.5.2/deploy-bare-metal.md               |  4 ++--
 .../version-2.5.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.5.2/helm-overview.md    |  4 ++--
 .../version-2.5.2/reference-configuration.md         |  2 +-
 .../version-2.5.2/security-overview.md               | 10 +++++-----
 .../version-2.5.2/standalone-docker.md               |  2 +-
 .../version-2.6.0/admin-api-brokers.md               |  2 +-
 .../version-2.6.0/admin-api-clusters.md              |  2 +-
 .../version-2.6.0/admin-api-namespaces.md            |  2 +-
 .../version-2.6.0/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.6.0/client-libraries.md | 14 +++++++-------
 .../versioned_docs/version-2.6.0/concepts-clients.md |  2 +-
 .../version-2.6.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.6.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.6.0/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.6.0/deploy-bare-metal.md               |  2 +-
 .../version-2.6.0/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.6.0/helm-overview.md    |  4 ++--
 .../version-2.6.0/reference-configuration.md         |  2 +-
 .../version-2.6.0/security-overview.md               |  8 ++++----
 .../version-2.6.0/security-tls-keystore.md           |  2 +-
 .../version-2.6.0/security-token-admin.md            |  2 +-
 .../version-2.6.0/standalone-docker.md               |  2 +-
 .../version-2.6.1/admin-api-brokers.md               |  2 +-
 .../version-2.6.1/admin-api-clusters.md              |  2 +-
 .../version-2.6.1/admin-api-namespaces.md            |  2 +-
 .../version-2.6.1/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.6.1/client-libraries.md | 14 +++++++-------
 .../versioned_docs/version-2.6.1/concepts-clients.md |  2 +-
 .../version-2.6.1/concepts-overview.md               | 16 ++++++++--------
 .../version-2.6.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.6.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.6.1/deploy-bare-metal.md               |  2 +-
 .../version-2.6.1/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.6.1/helm-overview.md    |  4 ++--
 .../version-2.6.1/reference-configuration.md         |  2 +-
 .../version-2.6.1/security-overview.md               |  8 ++++----
 .../version-2.6.1/security-tls-keystore.md           |  2 +-
 .../version-2.6.1/security-token-admin.md            |  2 +-
 .../version-2.6.1/standalone-docker.md               |  2 +-
 .../version-2.6.2/admin-api-brokers.md               |  2 +-
 .../version-2.6.2/admin-api-clusters.md              |  2 +-
 .../version-2.6.2/admin-api-namespaces.md            |  2 +-
 .../version-2.6.2/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.6.2/client-libraries.md | 14 +++++++-------
 .../versioned_docs/version-2.6.2/concepts-clients.md |  2 +-
 .../version-2.6.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.6.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.6.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.6.2/deploy-bare-metal.md               |  2 +-
 .../version-2.6.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.6.2/helm-overview.md    |  4 ++--
 .../version-2.6.2/reference-configuration.md         |  2 +-
 .../version-2.6.2/security-overview.md               |  8 ++++----
 .../version-2.6.2/security-tls-keystore.md           |  2 +-
 .../version-2.6.2/security-token-admin.md            |  2 +-
 .../version-2.6.2/standalone-docker.md               |  2 +-
 .../version-2.6.3/admin-api-brokers.md               |  2 +-
 .../version-2.6.3/admin-api-clusters.md              |  2 +-
 .../version-2.6.3/admin-api-namespaces.md            |  2 +-
 .../version-2.6.3/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.6.3/client-libraries.md | 14 +++++++-------
 .../versioned_docs/version-2.6.3/concepts-clients.md |  2 +-
 .../version-2.6.3/concepts-overview.md               | 16 ++++++++--------
 .../version-2.6.3/concepts-topic-compaction.md       |  2 +-
 .../version-2.6.3/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.6.3/deploy-bare-metal.md               |  2 +-
 .../version-2.6.3/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.6.3/helm-overview.md    |  4 ++--
 .../version-2.6.3/reference-configuration.md         |  2 +-
 .../version-2.6.3/security-overview.md               |  8 ++++----
 .../version-2.6.3/security-tls-keystore.md           |  2 +-
 .../version-2.6.3/security-token-admin.md            |  2 +-
 .../version-2.6.3/standalone-docker.md               |  2 +-
 .../version-2.6.4/admin-api-brokers.md               |  2 +-
 .../version-2.6.4/admin-api-clusters.md              |  2 +-
 .../version-2.6.4/admin-api-namespaces.md            |  2 +-
 .../version-2.6.4/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.6.4/client-libraries.md | 14 +++++++-------
 .../versioned_docs/version-2.6.4/concepts-clients.md |  2 +-
 .../version-2.6.4/concepts-overview.md               | 16 ++++++++--------
 .../version-2.6.4/concepts-topic-compaction.md       |  2 +-
 .../version-2.6.4/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.6.4/deploy-bare-metal.md               |  2 +-
 .../version-2.6.4/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.6.4/helm-overview.md    |  4 ++--
 .../version-2.6.4/reference-configuration.md         |  2 +-
 .../version-2.6.4/security-overview.md               |  8 ++++----
 .../version-2.6.4/security-tls-keystore.md           |  2 +-
 .../version-2.6.4/security-token-admin.md            |  2 +-
 .../version-2.6.4/standalone-docker.md               |  2 +-
 .../version-2.7.0/admin-api-brokers.md               |  2 +-
 .../version-2.7.0/admin-api-clusters.md              |  2 +-
 .../version-2.7.0/admin-api-namespaces.md            |  2 +-
 .../version-2.7.0/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.7.0/client-libraries.md | 14 +++++++-------
 .../version-2.7.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.7.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.7.0/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.7.0/deploy-bare-metal.md               |  2 +-
 .../version-2.7.0/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.7.0/helm-overview.md    |  4 ++--
 .../version-2.7.0/reference-configuration.md         |  2 +-
 .../version-2.7.0/security-overview.md               |  8 ++++----
 .../version-2.7.0/security-tls-keystore.md           |  2 +-
 .../version-2.7.0/security-token-admin.md            |  2 +-
 .../version-2.7.0/standalone-docker.md               |  2 +-
 .../version-2.7.1/admin-api-brokers.md               |  2 +-
 .../version-2.7.1/admin-api-clusters.md              |  2 +-
 .../version-2.7.1/admin-api-namespaces.md            |  2 +-
 .../version-2.7.1/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.7.1/client-libraries.md | 14 +++++++-------
 .../version-2.7.1/concepts-overview.md               | 16 ++++++++--------
 .../version-2.7.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.7.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.7.1/deploy-bare-metal.md               |  2 +-
 .../version-2.7.1/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.7.1/helm-overview.md    |  4 ++--
 .../version-2.7.1/reference-configuration.md         |  2 +-
 .../version-2.7.1/security-overview.md               |  8 ++++----
 .../version-2.7.1/security-tls-keystore.md           |  2 +-
 .../version-2.7.1/security-token-admin.md            |  2 +-
 .../version-2.7.1/standalone-docker.md               |  2 +-
 .../version-2.7.2/admin-api-brokers.md               |  2 +-
 .../version-2.7.2/admin-api-clusters.md              |  2 +-
 .../version-2.7.2/admin-api-namespaces.md            |  2 +-
 .../version-2.7.2/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.7.2/client-libraries.md | 14 +++++++-------
 .../version-2.7.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.7.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.7.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.7.2/deploy-bare-metal.md               |  2 +-
 .../version-2.7.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.7.2/helm-overview.md    |  4 ++--
 .../version-2.7.2/reference-configuration.md         |  2 +-
 .../version-2.7.2/security-overview.md               |  8 ++++----
 .../version-2.7.2/security-tls-keystore.md           |  2 +-
 .../version-2.7.2/security-token-admin.md            |  2 +-
 .../version-2.7.2/standalone-docker.md               |  2 +-
 .../version-2.7.3/admin-api-brokers.md               |  2 +-
 .../version-2.7.3/admin-api-clusters.md              |  2 +-
 .../version-2.7.3/admin-api-namespaces.md            |  2 +-
 .../version-2.7.3/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.7.3/client-libraries.md | 14 +++++++-------
 .../version-2.7.3/concepts-overview.md               | 16 ++++++++--------
 .../version-2.7.3/concepts-topic-compaction.md       |  2 +-
 .../version-2.7.3/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.7.3/deploy-bare-metal.md               |  2 +-
 .../version-2.7.3/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.7.3/helm-overview.md    |  4 ++--
 .../version-2.7.3/reference-configuration.md         |  2 +-
 .../version-2.7.3/security-overview.md               |  8 ++++----
 .../version-2.7.3/security-tls-keystore.md           |  2 +-
 .../version-2.7.3/security-token-admin.md            |  2 +-
 .../version-2.7.3/standalone-docker.md               |  2 +-
 .../version-2.7.4/admin-api-brokers.md               |  2 +-
 .../version-2.7.4/admin-api-clusters.md              |  2 +-
 .../version-2.7.4/admin-api-namespaces.md            |  2 +-
 .../version-2.7.4/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.7.4/client-libraries.md | 14 +++++++-------
 .../version-2.7.4/concepts-overview.md               | 16 ++++++++--------
 .../version-2.7.4/concepts-topic-compaction.md       |  2 +-
 .../version-2.7.4/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.7.4/deploy-bare-metal.md               |  2 +-
 .../version-2.7.4/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.7.4/helm-overview.md    |  4 ++--
 .../version-2.7.4/reference-configuration.md         |  2 +-
 .../version-2.7.4/security-overview.md               |  8 ++++----
 .../version-2.7.4/security-tls-keystore.md           |  2 +-
 .../version-2.7.4/security-token-admin.md            |  2 +-
 .../version-2.7.4/standalone-docker.md               |  2 +-
 .../version-2.8.0/admin-api-brokers.md               |  2 +-
 .../version-2.8.0/admin-api-clusters.md              |  2 +-
 .../version-2.8.0/admin-api-namespaces.md            |  2 +-
 .../version-2.8.0/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.8.0/client-libraries.md | 14 +++++++-------
 .../version-2.8.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.8.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.8.0/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.8.0/deploy-bare-metal.md               |  2 +-
 .../version-2.8.0/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.8.0/helm-overview.md    |  4 ++--
 .../version-2.8.0/security-overview.md               | 12 ++++++------
 .../version-2.8.0/security-tls-keystore.md           |  2 +-
 .../version-2.8.0/security-token-admin.md            |  2 +-
 .../version-2.8.0/standalone-docker.md               |  2 +-
 .../version-2.8.1/admin-api-brokers.md               |  2 +-
 .../version-2.8.1/admin-api-clusters.md              |  2 +-
 .../version-2.8.1/admin-api-namespaces.md            |  2 +-
 .../version-2.8.1/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.8.1/client-libraries.md | 14 +++++++-------
 .../version-2.8.1/concepts-overview.md               | 16 ++++++++--------
 .../version-2.8.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.8.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.8.1/deploy-bare-metal.md               |  2 +-
 .../version-2.8.1/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.8.1/helm-overview.md    |  4 ++--
 .../version-2.8.1/security-overview.md               | 12 ++++++------
 .../version-2.8.1/security-tls-keystore.md           |  2 +-
 .../version-2.8.1/security-token-admin.md            |  2 +-
 .../version-2.8.1/standalone-docker.md               |  2 +-
 .../version-2.8.2/admin-api-brokers.md               |  2 +-
 .../version-2.8.2/admin-api-clusters.md              |  2 +-
 .../version-2.8.2/admin-api-namespaces.md            |  2 +-
 .../version-2.8.2/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.8.2/client-libraries.md | 14 +++++++-------
 .../version-2.8.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.8.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.8.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.8.2/deploy-bare-metal.md               |  2 +-
 .../version-2.8.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.8.2/helm-overview.md    |  4 ++--
 .../version-2.8.2/security-overview.md               | 12 ++++++------
 .../version-2.8.2/security-tls-keystore.md           |  2 +-
 .../version-2.8.2/security-token-admin.md            |  2 +-
 .../version-2.8.2/standalone-docker.md               |  2 +-
 .../version-2.8.3/admin-api-brokers.md               |  2 +-
 .../version-2.8.3/admin-api-clusters.md              |  2 +-
 .../version-2.8.3/admin-api-namespaces.md            |  2 +-
 .../version-2.8.3/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.8.3/client-libraries.md | 14 +++++++-------
 .../version-2.8.3/concepts-overview.md               | 16 ++++++++--------
 .../version-2.8.3/concepts-topic-compaction.md       |  2 +-
 .../version-2.8.3/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.8.3/deploy-bare-metal.md               |  2 +-
 .../version-2.8.3/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.8.3/helm-overview.md    |  4 ++--
 .../version-2.8.3/security-overview.md               | 12 ++++++------
 .../version-2.8.3/security-tls-keystore.md           |  2 +-
 .../version-2.8.3/security-token-admin.md            |  2 +-
 .../version-2.9.0/admin-api-brokers.md               |  2 +-
 .../version-2.9.0/admin-api-clusters.md              |  2 +-
 .../version-2.9.0/admin-api-namespaces.md            |  2 +-
 .../version-2.9.0/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.9.0/client-libraries.md | 14 +++++++-------
 .../version-2.9.0/concepts-overview.md               | 16 ++++++++--------
 .../version-2.9.0/concepts-topic-compaction.md       |  2 +-
 .../version-2.9.0/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.9.0/deploy-bare-metal.md               |  2 +-
 .../version-2.9.0/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.9.0/helm-overview.md    |  4 ++--
 .../version-2.9.0/security-overview.md               | 12 ++++++------
 .../version-2.9.0/security-tls-keystore.md           |  2 +-
 .../version-2.9.0/security-token-admin.md            |  2 +-
 .../version-2.9.0/standalone-docker.md               |  2 +-
 .../version-2.9.1/admin-api-brokers.md               |  2 +-
 .../version-2.9.1/admin-api-clusters.md              |  2 +-
 .../version-2.9.1/admin-api-namespaces.md            |  2 +-
 .../version-2.9.1/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.9.1/client-libraries.md | 14 +++++++-------
 .../version-2.9.1/concepts-overview.md               | 16 ++++++++--------
 .../version-2.9.1/concepts-topic-compaction.md       |  2 +-
 .../version-2.9.1/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.9.1/deploy-bare-metal.md               |  2 +-
 .../version-2.9.1/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.9.1/helm-overview.md    |  4 ++--
 .../version-2.9.1/security-overview.md               | 12 ++++++------
 .../version-2.9.1/security-tls-keystore.md           |  2 +-
 .../version-2.9.1/security-token-admin.md            |  2 +-
 .../version-2.9.1/standalone-docker.md               |  2 +-
 .../version-2.9.2/admin-api-brokers.md               |  2 +-
 .../version-2.9.2/admin-api-clusters.md              |  2 +-
 .../version-2.9.2/admin-api-namespaces.md            |  2 +-
 .../version-2.9.2/client-libraries-go.md             |  2 +-
 .../versioned_docs/version-2.9.2/client-libraries.md | 14 +++++++-------
 .../version-2.9.2/concepts-overview.md               | 16 ++++++++--------
 .../version-2.9.2/concepts-topic-compaction.md       |  2 +-
 .../version-2.9.2/deploy-bare-metal-multi-cluster.md |  4 ++--
 .../version-2.9.2/deploy-bare-metal.md               |  2 +-
 .../version-2.9.2/getting-started-docker.md          |  2 +-
 .../versioned_docs/version-2.9.2/helm-overview.md    |  4 ++--
 .../version-2.9.2/security-overview.md               | 12 ++++++------
 .../version-2.9.2/security-tls-keystore.md           |  2 +-
 .../version-2.9.2/security-token-admin.md            |  2 +-
 502 files changed, 1133 insertions(+), 1133 deletions(-)

diff --git a/site2/docs/admin-api-brokers.md b/site2/docs/admin-api-brokers.md
index b583dec5970..661db9cad42 100644
--- a/site2/docs/admin-api-brokers.md
+++ b/site2/docs/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/docs/admin-api-clusters.md b/site2/docs/admin-api-clusters.md
index 2a5fb33743c..2a02e647e61 100644
--- a/site2/docs/admin-api-clusters.md
+++ b/site2/docs/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`](/tools/pulsar-admin/) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/docs/admin-api-namespaces.md b/site2/docs/admin-api-namespaces.md
index 794c27ec5d2..0ec7b1b595d 100644
--- a/site2/docs/admin-api-namespaces.md
+++ b/site2/docs/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/docs/concepts-overview.md b/site2/docs/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/docs/concepts-overview.md
+++ b/site2/docs/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/docs/concepts-topic-compaction.md b/site2/docs/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/docs/concepts-topic-compaction.md
+++ b/site2/docs/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/docs/deploy-bare-metal-multi-cluster.md b/site2/docs/deploy-bare-metal-multi-cluster.md
index 143d5028dbe..6ca2a971448 100644
--- a/site2/docs/deploy-bare-metal-multi-cluster.md
+++ b/site2/docs/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/docs/deploy-bare-metal.md b/site2/docs/deploy-bare-metal.md
index 34aeca57531..3fe9bda462d 100644
--- a/site2/docs/deploy-bare-metal.md
+++ b/site2/docs/deploy-bare-metal.md
@@ -201,7 +201,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/docs/functions-debug.md b/site2/docs/functions-debug.md
index 40217cd7702..714241d23f6 100644
--- a/site2/docs/functions-debug.md
+++ b/site2/docs/functions-debug.md
@@ -5,8 +5,8 @@ sidebar_label: "How to debug"
 ---
 
 You can use the following methods to debug Pulsar Functions:
-* [Debug with captured stderr](functions-debug-stderr)
-* [Debug with unit test](functions-debug-unit-test)
-* [Debug with localrun mode](functions-debug-localrun)
-* [Debug with log topic](functions-debug-log-topic)
-* [Debug with Functions CLI](functions-debug-cli)
\ No newline at end of file
+* [Debug with captured stderr](functions-debug-stderr.md)
+* [Debug with unit test](functions-debug-unit-test.md)
+* [Debug with localrun mode](functions-debug-localrun.md)
+* [Debug with log topic](functions-debug-log-topic.md)
+* [Debug with Functions CLI](functions-debug-cli.md)
\ No newline at end of file
diff --git a/site2/docs/functions-develop.md b/site2/docs/functions-develop.md
index 5ffb54032ba..380ce9c602c 100644
--- a/site2/docs/functions-develop.md
+++ b/site2/docs/functions-develop.md
@@ -13,12 +13,12 @@ Develop functions in Java, Python, or Go.
 :::
 
 To develop Pulsar Functions, you can leverage the following tools and features.
-* [APIs](functions-develop-api)
-* [User-defined configs](functions-develop-user-defined-configs)
-* [Logs](functions-develop-log)
-* [Metrics](functions-develop-metrics)
-* [Security](functions-develop-security)
-* [Stage storage](functions-develop-state)
-* [Admin APIs](functions-develop-admin-api)
-* [Schema registry](functions-schema-registry)
-* [SerDe](functions-develop-serde)
\ No newline at end of file
+* [APIs](functions-develop-api.md)
+* [User-defined configs](functions-develop-user-defined-configs.md)
+* [Logs](functions-develop-log.md)
+* [Metrics](functions-develop-metrics.md)
+* [Security](functions-develop-security.md)
+* [Stage storage](functions-develop-state.md)
+* [Admin APIs](functions-develop-admin-api.md)
+* [Schema registry](functions-schema-registry.md)
+* [SerDe](functions-develop-serde.md)
\ No newline at end of file
diff --git a/site2/docs/helm-overview.md b/site2/docs/helm-overview.md
index 474183bf4c6..9afa1533bba 100644
--- a/site2/docs/helm-overview.md
+++ b/site2/docs/helm-overview.md
@@ -65,8 +65,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/docs/security-overview.md b/site2/docs/security-overview.md
index e3eeed1ee60..5877c07d606 100644
--- a/site2/docs/security-overview.md
+++ b/site2/docs/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) or a [
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
 
diff --git a/site2/docs/security-tls-keystore.md b/site2/docs/security-tls-keystore.md
index e7b41527bfd..0fc35abc710 100644
--- a/site2/docs/security-tls-keystore.md
+++ b/site2/docs/security-tls-keystore.md
@@ -230,7 +230,7 @@ For example:
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/docs/security-token-admin.md b/site2/docs/security-token-admin.md
index 9424e83671b..4accb85a75a 100644
--- a/site2/docs/security-token-admin.md
+++ b/site2/docs/security-token-admin.md
@@ -28,7 +28,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/docs/standalone-docker.md b/site2/docs/standalone-docker.md
index f636d2d73dd..aaf2b1d3ac6 100644
--- a/site2/docs/standalone-docker.md
+++ b/site2/docs/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-brokers.md b/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-brokers.md
index 33f06387546..fb353957e0e 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-brokers.md
@@ -14,7 +14,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-clusters.md b/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-clusters.md
index 1116be4fd33..c51046cd906 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-clusters.md
@@ -12,7 +12,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-namespaces.md
index a82b7241770..f07cec7efcc 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/admin-api-namespaces.md
@@ -11,7 +11,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/client-libraries.md b/site2/website/versioned_docs/version-2.1.0-incubating/client-libraries.md
index 459530cf56f..a28b6b3d434 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/client-libraries.md
@@ -20,7 +20,7 @@ There are also two independent sets of Javadoc API docs available:
 
 Library | Purpose
 :-------|:-------
-[`org.apache.pulsar.client.api`](/api/client) | The [Pulsar Java client](client-libraries-java) for producing and consuming messages on Pulsar topics [`org.apache.pulsar.client.admin`](/api/admin) | The Java client for the [Pulsar admin interface](admin-api-overview)
+[`org.apache.pulsar.client.api`](/api/client) | The [Pulsar Java client](client-libraries-java) for producing and consuming messages on Pulsar topics [`org.apache.pulsar.client.admin`](/api/admin) | The Java client for the [Pulsar admin interface](admin-api-overview.md)
 
 
 ## Go client
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-clients.md b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-clients.md
index 31ecf51d306..0e8388d950a 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-messaging.md b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-messaging.md
index a3af3eceafe..4049a8b2602 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-overview.md b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-overview.md
index f5c947d0195..cf6046e391e 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-overview.md
@@ -12,7 +12,7 @@ Pulsar's key features include:
 * Native support for multiple clusters in a Pulsar instance, with seamless [geo-replication](administration-geo) of messages across clusters
 * Very low publish and end-to-end latency
 * Seamless scalability out to over a million topics
-* A simple [client API](concepts-clients.md) with bindings for [Java](client-libraries-java.md), [Python](client-libraries-python.md), and [C++](client-libraries-cpp)
+* A simple [client API](concepts-clients.md) with bindings for [Java](client-libraries-java.md), [Python](client-libraries-python.md), and [C++](client-libraries-cpp.md)
 * Multiple [subscription types](concepts-messaging.md#subscription-types) for topics ([exclusive](concepts-messaging.md#exclusive), [shared](concepts-messaging.md#shared), and [failover](concepts-messaging.md#failover))
 * Guaranteed message delivery with [persistent message storage](concepts-architecture-overview.md#persistent-storage) provided by [Apache BookKeeper](http://bookkeeper.apache.org/)
 * A serverless lightweight computing framework [Pulsar Functions](functions-overview) offers stream native data processing.
@@ -21,12 +21,12 @@ Pulsar's key features include:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
-- [Schema Registry](concepts-schema-registry)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
+- [Schema Registry](concepts-schema-registry.md)
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal-multi-cluster.md
index ab7e32a77f4..1dc7d9e76b7 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal-multi-cluster.md
@@ -64,9 +64,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -75,7 +75,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal.md
index 7a5374945c2..c3dc7b9a377 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-bare-metal.md
@@ -93,7 +93,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-kubernetes.md b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-kubernetes.md
index 73ef125ccf1..58446cf789a 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-kubernetes.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-kubernetes.md
@@ -19,7 +19,7 @@ The deployment method shown in this guide relies on [YAML](http://yaml.org/) def
 * A two-bookie BookKeeper cluster
 * A three-node ZooKeeper cluster
 * A three-broker Pulsar cluster
-* A [monitoring stack](#) consisting of [Prometheus](https://prometheus.io/), [Grafana](https://grafana.com), and the [Pulsar dashboard](administration-dashboard)
+* A [monitoring stack](#) consisting of [Prometheus](https://prometheus.io/), [Grafana](https://grafana.com), and the [Pulsar dashboard](administration-dashboard.md)
 * A [pod](https://kubernetes.io/docs/concepts/workloads/pods/pod/) from which you can run administrative commands using the [`pulsar-admin`](reference-pulsar-admin) CLI tool
 
 ## Setup
@@ -427,9 +427,9 @@ If the IP address for the proxy were, for example, 35.12.13.198, you could conne
 
 You can find client documentation for:
 
-* [Java](client-libraries-java)
-* [Python](client-libraries-python)
-* [C++](client-libraries-cpp)
+* [Java](client-libraries-java.md)
+* [Python](client-libraries-python.md)
+* [C++](client-libraries-cpp.md)
 
 
 ## Deploying Pulsar components (helm)
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-monitoring.md b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-monitoring.md
index fadc57ee2b0..8c537e5b1ce 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/deploy-monitoring.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/deploy-monitoring.md
@@ -77,7 +77,7 @@ the `prometheusStatsHttpPort` in `conf/bookkeeper.conf`.
 You can configure Prometheus to collect and store the metrics data by following the Prometheus [Getting started](https://prometheus.io/docs/introduction/getting_started/) guide.
 
 When running on bare metal, you can provide the list of nodes that needs to be probed. When deploying
-in a Kubernetes cluster, the monitoring is automatically setup with the [provided](deploy-kubernetes)
+in a Kubernetes cluster, the monitoring is automatically setup with the [provided](deploy-kubernetes.md)
 instructions.
 
 ## Dashboards
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/functions-api.md b/site2/website/versioned_docs/version-2.1.0-incubating/functions-api.md
index c53359bc5b2..40480139375 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/functions-api.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/functions-api.md
@@ -117,7 +117,7 @@ Both the [Java](#java-sdk-functions) and [Python](#python-sdk-functions) SDKs pr
 * The version of the function
 * The [logger object](functions-overview.md#logging) used by the function, which can be used to create function log messages
 * Access to arbitrary [user config](#user-config) values supplied via the CLI
-* An interface for recording [metrics](functions-metrics)
+* An interface for recording [metrics](functions-metrics.md)
 * An interface for storing and retrieving state in [state storage](functions-overview.md#state-storage)
 
 ### User config
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/functions-deploying.md b/site2/website/versioned_docs/version-2.1.0-incubating/functions-deploying.md
index f8545aff4d3..28276e9deff 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/functions-deploying.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/functions-deploying.md
@@ -53,7 +53,7 @@ Tenant | Derived from the input topics' names. If the input topics are under the
 Namespace | Derived from the input topics' names. If the input topics are under the `asia` namespace under the `marketing` tenant---i.e. the topic names have the form `persistent://marketing/asia/{topicName}`, then the namespace will be `asia`.
 Output topic | `{input topic}-{function name}-output`. A function with an input topic name of `incoming` and a function name of `exclamation`, for example, would have an output topic of `incoming-exclamation-output`.
 Subscription type | For at-least-once and at-most-once [processing guarantees](functions-guarantees), the [`SHARED`](concepts-messaging.md#shared) is applied by default; for effectively-once guarantees, [`FAILOVER`](concepts-messaging.md#failover) is applied
-Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees)
+Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees.md)
 Pulsar service URL | `pulsar://localhost:6650`
 
 #### Example use of defaults
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/functions-quickstart.md b/site2/website/versioned_docs/version-2.1.0-incubating/functions-quickstart.md
index a2b21cdfeed..3ccc0e531f9 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/functions-quickstart.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/functions-quickstart.md
@@ -312,5 +312,5 @@ This string was backwards but is now forwards
 
 Once again, success! We created a brand new Pulsar Function, deployed it in our Pulsar standalone cluster in [cluster mode](#run-a-pulsar-function-in-cluster-mode) and successfully triggered the function. If you're ready for more, check out one of these docs:
 
-* [The Pulsar Functions API](functions-api)
-* [Deploying Pulsar Functions](functions-deploying)
+* [The Pulsar Functions API](functions-api.md)
+* [Deploying Pulsar Functions](functions-deploying.md)
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-docker.md b/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-docker.md
index 9c2b949fe80..df1b6b31b37 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-docker.md
@@ -68,7 +68,7 @@ use one of these root URLs for interacting with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-Here's an example that lets you quickly get started with Pulsar by using the [Python](client-libraries-python)
+Here's an example that lets you quickly get started with Pulsar by using the [Python](client-libraries-python.md)
 client API.
 
 You can install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-standalone.md b/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-standalone.md
index 844ba265fbd..c73b6dd0d12 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-standalone.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/getting-started-standalone.md
@@ -51,9 +51,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -62,7 +62,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/io-connectors.md b/site2/website/versioned_docs/version-2.1.0-incubating/io-connectors.md
index 96836be5b92..10e84b89159 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/io-connectors.md
@@ -10,10 +10,10 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
-- [Twitter Firehose Source Connector](io-twitter)
+- [Twitter Firehose Source Connector](io-twitter.md)
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/io-overview.md b/site2/website/versioned_docs/version-2.1.0-incubating/io-overview.md
index 4a1d78efb8c..e0f2277e18e 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/io-overview.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/io-overview.md
@@ -25,7 +25,7 @@ This diagram illustrates the relationship between sources, sinks, and Pulsar:
 
 Pulsar IO connectors can be managed via the [`pulsar-admin`](reference-pulsar-admin) CLI tool, in particular the [`source`](reference-pulsar-admin.md#source) and [`sink`](reference-pulsar-admin.md#sink) commands.
 
-> For a guide to managing connectors in your Pulsar installation, see the [Getting started with Pulsar IO](io-quickstart)
+> For a guide to managing connectors in your Pulsar installation, see the [Getting started with Pulsar IO](io-quickstart.md)
 
 The following connectors are currently available for Pulsar:
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/reference-configuration.md b/site2/website/versioned_docs/version-2.1.0-incubating/reference-configuration.md
index cd51a0bbe7c..2d9652d0690 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/incubator-pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/incubator-pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/security-overview.md b/site2/website/versioned_docs/version-2.1.0-incubating/security-overview.md
index 6e6e0a72c65..62d51c45c0b 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/security-overview.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/security-overview.md
@@ -28,13 +28,13 @@ role token is then used for [Authorization and ACLs](security-authorization) to
 
 Currently Pulsar supports two authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
 
 ## Contents
 
 - [Encryption](security-tls-transport.md) and [Authentication](security-tls-authentication) using TLS
-- [Authentication using Athenz](security-athenz)
-- [Authorization and ACLs](security-authorization)
-- [End-to-End Encryption](security-encryption)
+- [Authentication using Athenz](security-athenz.md)
+- [Authorization and ACLs](security-authorization.md)
+- [End-to-End Encryption](security-encryption.md)
 
diff --git a/site2/website/versioned_docs/version-2.1.0-incubating/standalone.md b/site2/website/versioned_docs/version-2.1.0-incubating/standalone.md
index 273aa575e87..244f0b3ea72 100644
--- a/site2/website/versioned_docs/version-2.1.0-incubating/standalone.md
+++ b/site2/website/versioned_docs/version-2.1.0-incubating/standalone.md
@@ -51,9 +51,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -62,7 +62,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-brokers.md b/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-clusters.md b/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/client-libraries.md b/site2/website/versioned_docs/version-2.1.1-incubating/client-libraries.md
index 3fb4f60b62c..f6b76ab065f 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/client-libraries.md
@@ -20,7 +20,7 @@ There are also two independent sets of Javadoc API docs available:
 
 Library | Purpose
 :-------|:-------
-[`org.apache.pulsar.client.api`](/api/client) | The [Pulsar Java client](client-libraries-java) for producing and consuming messages on Pulsar topics [`org.apache.pulsar.client.admin`](/api/admin) | The Java client for the [Pulsar admin interface](admin-api-overview)
+[`org.apache.pulsar.client.api`](/api/client) | The [Pulsar Java client](client-libraries-java) for producing and consuming messages on Pulsar topics [`org.apache.pulsar.client.admin`](/api/admin) | The Java client for the [Pulsar admin interface](admin-api-overview.md)
 
 
 ## Go client
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/concepts-overview.md b/site2/website/versioned_docs/version-2.1.1-incubating/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.1.1-incubating/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal.md
index 7a5374945c2..c3dc7b9a377 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/deploy-bare-metal.md
@@ -93,7 +93,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/functions-api.md b/site2/website/versioned_docs/version-2.1.1-incubating/functions-api.md
index 061c33a5de9..ff265f3fc9c 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/functions-api.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/functions-api.md
@@ -117,7 +117,7 @@ Both the [Java](#java-sdk-functions) and [Python](#python-sdk-functions) SDKs pr
 * The version of the function
 * The [logger object](functions-overview.md#logging) used by the function, which can be used to create function log messages
 * Access to arbitrary [user config](#user-config) values supplied via the CLI
-* An interface for recording [metrics](functions-metrics)
+* An interface for recording [metrics](functions-metrics.md)
 * An interface for storing and retrieving state in [state storage](functions-overview.md#state-storage)
 
 ### User config
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/functions-deploying.md b/site2/website/versioned_docs/version-2.1.1-incubating/functions-deploying.md
index f8545aff4d3..28276e9deff 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/functions-deploying.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/functions-deploying.md
@@ -53,7 +53,7 @@ Tenant | Derived from the input topics' names. If the input topics are under the
 Namespace | Derived from the input topics' names. If the input topics are under the `asia` namespace under the `marketing` tenant---i.e. the topic names have the form `persistent://marketing/asia/{topicName}`, then the namespace will be `asia`.
 Output topic | `{input topic}-{function name}-output`. A function with an input topic name of `incoming` and a function name of `exclamation`, for example, would have an output topic of `incoming-exclamation-output`.
 Subscription type | For at-least-once and at-most-once [processing guarantees](functions-guarantees), the [`SHARED`](concepts-messaging.md#shared) is applied by default; for effectively-once guarantees, [`FAILOVER`](concepts-messaging.md#failover) is applied
-Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees)
+Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees.md)
 Pulsar service URL | `pulsar://localhost:6650`
 
 #### Example use of defaults
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/functions-quickstart.md b/site2/website/versioned_docs/version-2.1.1-incubating/functions-quickstart.md
index a2b21cdfeed..3ccc0e531f9 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/functions-quickstart.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/functions-quickstart.md
@@ -312,5 +312,5 @@ This string was backwards but is now forwards
 
 Once again, success! We created a brand new Pulsar Function, deployed it in our Pulsar standalone cluster in [cluster mode](#run-a-pulsar-function-in-cluster-mode) and successfully triggered the function. If you're ready for more, check out one of these docs:
 
-* [The Pulsar Functions API](functions-api)
-* [Deploying Pulsar Functions](functions-deploying)
+* [The Pulsar Functions API](functions-api.md)
+* [Deploying Pulsar Functions](functions-deploying.md)
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-docker.md b/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-standalone.md b/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-standalone.md
index bb5fe2d5129..e814c76d5a3 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-standalone.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/getting-started-standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/reference-configuration.md b/site2/website/versioned_docs/version-2.1.1-incubating/reference-configuration.md
index 2c45934495e..69ad9146046 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/incubator-pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/incubator-pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/security-overview.md b/site2/website/versioned_docs/version-2.1.1-incubating/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/security-overview.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.1.1-incubating/standalone.md b/site2/website/versioned_docs/version-2.1.1-incubating/standalone.md
index 43518f53cf5..6781f9e7130 100644
--- a/site2/website/versioned_docs/version-2.1.1-incubating/standalone.md
+++ b/site2/website/versioned_docs/version-2.1.1-incubating/standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.10.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.10.0/admin-api-brokers.md
index 3a0eb1cdc8c..89255b7f85e 100644
--- a/site2/website/versioned_docs/version-2.10.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.10.0/admin-api-brokers.md
@@ -30,7 +30,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.10.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.10.0/admin-api-clusters.md
index 746bf1adaa5..7e4f7651ffb 100644
--- a/site2/website/versioned_docs/version-2.10.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.10.0/admin-api-clusters.md
@@ -28,7 +28,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`](/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.10.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.10.0/admin-api-namespaces.md
index d80f459b67f..5ec410708b9 100644
--- a/site2/website/versioned_docs/version-2.10.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.10.0/admin-api-namespaces.md
@@ -27,7 +27,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.10.0/concepts-overview.md b/site2/website/versioned_docs/version-2.10.0/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.10.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.10.0/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.10.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.10.0/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.10.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.10.0/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal-multi-cluster.md
index 1d03c415189..d6d8956795e 100644
--- a/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal.md
index 3ea98d4c5d6..f01144a8dca 100644
--- a/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.10.0/deploy-bare-metal.md
@@ -202,7 +202,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.10.0/helm-overview.md b/site2/website/versioned_docs/version-2.10.0/helm-overview.md
index e4b77f71c66..fc4cbfe426a 100644
--- a/site2/website/versioned_docs/version-2.10.0/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.10.0/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.10.0/security-overview.md b/site2/website/versioned_docs/version-2.10.0/security-overview.md
index 2d59df5893d..ee12a589fcc 100644
--- a/site2/website/versioned_docs/version-2.10.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.10.0/security-overview.md
@@ -27,11 +27,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.10.0/security-tls-keystore.md b/site2/website/versioned_docs/version-2.10.0/security-tls-keystore.md
index 3632e211456..0216edd6d00 100644
--- a/site2/website/versioned_docs/version-2.10.0/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.10.0/security-tls-keystore.md
@@ -231,7 +231,7 @@ For example:
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.10.0/security-token-admin.md b/site2/website/versioned_docs/version-2.10.0/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.10.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.10.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.2.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.2.0/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.2.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.2.0/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.2.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.2.0/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.2.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.2.0/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.2.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.2.0/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.2.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.2.0/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.2.0/client-libraries.md b/site2/website/versioned_docs/version-2.2.0/client-libraries.md
index e5d11e2dff1..fbfbfcd1137 100644
--- a/site2/website/versioned_docs/version-2.2.0/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.2.0/client-libraries.md
@@ -20,7 +20,7 @@ There are also two independent sets of Javadoc API docs available:
 
 Library | Purpose
 :-------|:-------
-[`org.apache.pulsar.client.api`](/api/client) | The [Pulsar Java client](client-libraries-java) for producing and consuming messages on Pulsar topics [`org.apache.pulsar.client.admin`](/api/admin) | The Java client for the [Pulsar admin interface](admin-api-overview)
+[`org.apache.pulsar.client.api`](/api/client) | The [Pulsar Java client](client-libraries-java) for producing and consuming messages on Pulsar topics [`org.apache.pulsar.client.admin`](/api/admin) | The Java client for the [Pulsar admin interface](admin-api-overview.md)
 
 
 ## Go client
diff --git a/site2/website/versioned_docs/version-2.2.0/concepts-overview.md b/site2/website/versioned_docs/version-2.2.0/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/website/versioned_docs/version-2.2.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.2.0/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.2.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.2.0/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.2.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.2.0/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal-multi-cluster.md
index 7ef7990fd42..072c592037c 100644
--- a/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal-multi-cluster.md
@@ -67,9 +67,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal.md
index bd19add0ad6..f6ed8591358 100644
--- a/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.2.0/deploy-bare-metal.md
@@ -96,7 +96,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -188,7 +188,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.2.0/functions-api.md b/site2/website/versioned_docs/version-2.2.0/functions-api.md
index 554e93b6620..e9f1ffd4407 100644
--- a/site2/website/versioned_docs/version-2.2.0/functions-api.md
+++ b/site2/website/versioned_docs/version-2.2.0/functions-api.md
@@ -126,7 +126,7 @@ Both the [Java](#java-sdk-functions) and [Python](#python-sdk-functions) SDKs pr
 * The version of the function
 * The [logger object](functions-overview.md#logging) used by the function, which can be used to create function log messages
 * Access to arbitrary [user config](#user-config) values supplied via the CLI
-* An interface for recording [metrics](functions-metrics)
+* An interface for recording [metrics](functions-metrics.md)
 * An interface for storing and retrieving state in [state storage](functions-overview.md#state-storage)
 
 ### User config
diff --git a/site2/website/versioned_docs/version-2.2.0/functions-deploying.md b/site2/website/versioned_docs/version-2.2.0/functions-deploying.md
index fe10138bd76..19565c1c438 100644
--- a/site2/website/versioned_docs/version-2.2.0/functions-deploying.md
+++ b/site2/website/versioned_docs/version-2.2.0/functions-deploying.md
@@ -53,7 +53,7 @@ Tenant | Derived from the input topics' names. If the input topics are under the
 Namespace | Derived from the input topics' names. If the input topics are under the `asia` namespace under the `marketing` tenant---i.e. the topic names have the form `persistent://marketing/asia/{topicName}`, then the namespace will be `asia`.
 Output topic | `{input topic}-{function name}-output`. A function with an input topic name of `incoming` and a function name of `exclamation`, for example, would have an output topic of `incoming-exclamation-output`.
 Subscription type | For at-least-once and at-most-once [processing guarantees](functions-guarantees), the [`SHARED`](concepts-messaging.md#shared) is applied by default; for effectively-once guarantees, [`FAILOVER`](concepts-messaging.md#failover) is applied
-Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees)
+Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees.md)
 Pulsar service URL | `pulsar://localhost:6650`
 
 #### Example use of defaults
diff --git a/site2/website/versioned_docs/version-2.2.0/functions-quickstart.md b/site2/website/versioned_docs/version-2.2.0/functions-quickstart.md
index d86198e3be0..76563f64c31 100644
--- a/site2/website/versioned_docs/version-2.2.0/functions-quickstart.md
+++ b/site2/website/versioned_docs/version-2.2.0/functions-quickstart.md
@@ -312,5 +312,5 @@ This string was backwards but is now forwards
 
 Once again, success! We created a brand new Pulsar Function, deployed it in our Pulsar standalone cluster in [cluster mode](#run-a-pulsar-function-in-cluster-mode) and successfully triggered the function. If you're ready for more, check out one of these docs:
 
-* [The Pulsar Functions API](functions-api)
-* [Deploying Pulsar Functions](functions-deploying)
+* [The Pulsar Functions API](functions-api.md)
+* [Deploying Pulsar Functions](functions-deploying.md)
diff --git a/site2/website/versioned_docs/version-2.2.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.2.0/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.2.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.2.0/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.2.0/getting-started-standalone.md b/site2/website/versioned_docs/version-2.2.0/getting-started-standalone.md
index 805b82e6265..59a19174b2e 100644
--- a/site2/website/versioned_docs/version-2.2.0/getting-started-standalone.md
+++ b/site2/website/versioned_docs/version-2.2.0/getting-started-standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](http://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -155,7 +155,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.2.0/io-overview.md b/site2/website/versioned_docs/version-2.2.0/io-overview.md
index 4010945ef6c..4b238dac32f 100644
--- a/site2/website/versioned_docs/version-2.2.0/io-overview.md
+++ b/site2/website/versioned_docs/version-2.2.0/io-overview.md
@@ -25,7 +25,7 @@ This diagram illustrates the relationship between sources, sinks, and Pulsar:
 
 Pulsar IO connectors can be managed via the [`pulsar-admin`](reference-pulsar-admin) CLI tool, in particular the [`source`](reference-pulsar-admin.md#source) and [`sink`](reference-pulsar-admin.md#sink) commands.
 
-> For a guide to managing connectors in your Pulsar installation, see the [Getting started with Pulsar IO](io-quickstart)
+> For a guide to managing connectors in your Pulsar installation, see the [Getting started with Pulsar IO](io-quickstart.md)
 
 The following connectors are currently available for Pulsar:
 
diff --git a/site2/website/versioned_docs/version-2.2.0/reference-configuration.md b/site2/website/versioned_docs/version-2.2.0/reference-configuration.md
index e88628c73a1..4a475557c94 100644
--- a/site2/website/versioned_docs/version-2.2.0/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.2.0/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.2.0/security-overview.md b/site2/website/versioned_docs/version-2.2.0/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.2.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.2.0/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.2.0/standalone-docker.md b/site2/website/versioned_docs/version-2.2.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.2.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.2.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.2.0/standalone.md b/site2/website/versioned_docs/version-2.2.0/standalone.md
index 6a4945ca369..7297d792353 100644
--- a/site2/website/versioned_docs/version-2.2.0/standalone.md
+++ b/site2/website/versioned_docs/version-2.2.0/standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](http://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -155,7 +155,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.2.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.2.1/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.2.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.2.1/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.2.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.2.1/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.2.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.2.1/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.2.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.2.1/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.2.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.2.1/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.2.1/concepts-clients.md b/site2/website/versioned_docs/version-2.2.1/concepts-clients.md
index cf0cdda9449..b9a3940f2ad 100644
--- a/site2/website/versioned_docs/version-2.2.1/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.2.1/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.2.1/concepts-overview.md b/site2/website/versioned_docs/version-2.2.1/concepts-overview.md
index d7cde103d56..7ba672b0423 100644
--- a/site2/website/versioned_docs/version-2.2.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.2.1/concepts-overview.md
@@ -12,7 +12,7 @@ Pulsar's key features include:
 * Native support for multiple clusters in a Pulsar instance, with seamless [geo-replication](administration-geo) of messages across clusters
 * Very low publish and end-to-end latency
 * Seamless scalability out to over a million topics
-* A simple [client API](concepts-clients.md) with bindings for [Java](client-libraries-java.md), [Go](client-libraries-go.md), [Python](client-libraries-python.md) and [C++](client-libraries-cpp)
+* A simple [client API](concepts-clients.md) with bindings for [Java](client-libraries-java.md), [Go](client-libraries-go.md), [Python](client-libraries-python.md) and [C++](client-libraries-cpp.md)
 * Multiple [subscription types](concepts-messaging.md#subscription-types) for topics ([exclusive](concepts-messaging.md#exclusive), [shared](concepts-messaging.md#shared), and [failover](concepts-messaging.md#failover))
 * Guaranteed message delivery with [persistent message storage](concepts-architecture-overview.md#persistent-storage) provided by [Apache BookKeeper](http://bookkeeper.apache.org/)
 * A serverless lightweight computing framework [Pulsar Functions](functions-overview) offers stream native data processing.
@@ -21,12 +21,12 @@ Pulsar's key features include:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
-- [Schema Registry](concepts-schema-registry)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
+- [Schema Registry](concepts-schema-registry.md)
diff --git a/site2/website/versioned_docs/version-2.2.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.2.1/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.2.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.2.1/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal.md
index f5ec65c6b89..04b240f43a7 100644
--- a/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.2.1/deploy-bare-metal.md
@@ -99,7 +99,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -191,7 +191,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.2.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.2.1/getting-started-docker.md
index 317596d5f8f..7e7b69f5335 100644
--- a/site2/website/versioned_docs/version-2.2.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.2.1/getting-started-docker.md
@@ -68,7 +68,7 @@ use one of these root URLs for interacting with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-Here's an example that lets you quickly get started with Pulsar by using the [Python](client-libraries-python)
+Here's an example that lets you quickly get started with Pulsar by using the [Python](client-libraries-python.md)
 client API.
 
 You can install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.2.1/getting-started-standalone.md b/site2/website/versioned_docs/version-2.2.1/getting-started-standalone.md
index 93a5ef8566f..d76527539cc 100644
--- a/site2/website/versioned_docs/version-2.2.1/getting-started-standalone.md
+++ b/site2/website/versioned_docs/version-2.2.1/getting-started-standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](http://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -155,7 +155,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.2.1/io-connectors.md b/site2/website/versioned_docs/version-2.2.1/io-connectors.md
index 285a926a878..0c10b10dbc6 100644
--- a/site2/website/versioned_docs/version-2.2.1/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.2.1/io-connectors.md
@@ -10,12 +10,12 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
-- [Twitter Firehose Source Connector](io-twitter)
-- [CDC Source Connector based on Debezium](io-cdc)
+- [Twitter Firehose Source Connector](io-twitter.md)
+- [CDC Source Connector based on Debezium](io-cdc.md)
 - [Netty Tcp Source Connector](io-tcp.md#source)
diff --git a/site2/website/versioned_docs/version-2.2.1/io-overview.md b/site2/website/versioned_docs/version-2.2.1/io-overview.md
index d2c710b054f..f6e86827ed5 100644
--- a/site2/website/versioned_docs/version-2.2.1/io-overview.md
+++ b/site2/website/versioned_docs/version-2.2.1/io-overview.md
@@ -25,7 +25,7 @@ This diagram illustrates the relationship between sources, sinks, and Pulsar:
 
 Pulsar IO connectors can be managed via the [`pulsar-admin`](reference-pulsar-admin) CLI tool, in particular the [`source`](reference-pulsar-admin.md#source) and [`sink`](reference-pulsar-admin.md#sink) commands.
 
-> For a guide to managing connectors in your Pulsar installation, see the [Getting started with Pulsar IO](io-quickstart)
+> For a guide to managing connectors in your Pulsar installation, see the [Getting started with Pulsar IO](io-quickstart.md)
 
 The following connectors are currently available for Pulsar:
 
diff --git a/site2/website/versioned_docs/version-2.2.1/reference-configuration.md b/site2/website/versioned_docs/version-2.2.1/reference-configuration.md
index 1221ee8b7a5..4be22718145 100644
--- a/site2/website/versioned_docs/version-2.2.1/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.2.1/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.2.1/security-overview.md b/site2/website/versioned_docs/version-2.2.1/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.2.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.2.1/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.2.1/security-token-admin.md b/site2/website/versioned_docs/version-2.2.1/security-token-admin.md
index 40ca2dd1c47..f3cec69ec9d 100644
--- a/site2/website/versioned_docs/version-2.2.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.2.1/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.2.1/standalone-docker.md b/site2/website/versioned_docs/version-2.2.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.2.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.2.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.2.1/standalone.md b/site2/website/versioned_docs/version-2.2.1/standalone.md
index 11eedeb3708..c17a49306cd 100644
--- a/site2/website/versioned_docs/version-2.2.1/standalone.md
+++ b/site2/website/versioned_docs/version-2.2.1/standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](http://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -155,7 +155,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.3.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.3.0/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.3.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.3.0/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.3.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.3.0/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.3.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.3.0/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.3.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.3.0/admin-api-namespaces.md
index b9528d862a5..5be203344c6 100644
--- a/site2/website/versioned_docs/version-2.3.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.3.0/admin-api-namespaces.md
@@ -11,7 +11,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.3.0/concepts-messaging.md b/site2/website/versioned_docs/version-2.3.0/concepts-messaging.md
index c8cbcee0619..a49105fa769 100644
--- a/site2/website/versioned_docs/version-2.3.0/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.3.0/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.3.0/concepts-overview.md b/site2/website/versioned_docs/version-2.3.0/concepts-overview.md
index 1ca53de6d9e..016e12b5220 100644
--- a/site2/website/versioned_docs/version-2.3.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.3.0/concepts-overview.md
@@ -12,7 +12,7 @@ Pulsar's key features include:
 * Native support for multiple clusters in a Pulsar instance, with seamless [geo-replication](administration-geo) of messages across clusters
 * Very low publish and end-to-end latency
 * Seamless scalability out to over a million topics
-* A simple [client API](concepts-clients.md) with bindings for [Java](client-libraries-java.md), [Go](client-libraries-go.md), [Python](client-libraries-python.md) and [C++](client-libraries-cpp)
+* A simple [client API](concepts-clients.md) with bindings for [Java](client-libraries-java.md), [Go](client-libraries-go.md), [Python](client-libraries-python.md) and [C++](client-libraries-cpp.md)
 * Multiple [subscription types](concepts-messaging.md#subscription-types) for topics ([exclusive](concepts-messaging.md#exclusive), [shared](concepts-messaging.md#shared), and [failover](concepts-messaging.md#failover))
 * Guaranteed message delivery with [persistent message storage](concepts-architecture-overview.md#persistent-storage) provided by [Apache BookKeeper](http://bookkeeper.apache.org/)
 * A serverless lightweight computing framework [Pulsar Functions](functions-overview) offers stream native data processing.
@@ -21,12 +21,12 @@ Pulsar's key features include:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
-- [Schema Registry](concepts-schema-registry)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
+- [Schema Registry](concepts-schema-registry.md)
diff --git a/site2/website/versioned_docs/version-2.3.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.3.0/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.3.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.3.0/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal.md
index 699429ef03f..ace80182ddd 100644
--- a/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.3.0/deploy-bare-metal.md
@@ -99,7 +99,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -182,7 +182,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.3.0/deploy-monitoring.md b/site2/website/versioned_docs/version-2.3.0/deploy-monitoring.md
index af9bfd34edc..677c9092bd2 100644
--- a/site2/website/versioned_docs/version-2.3.0/deploy-monitoring.md
+++ b/site2/website/versioned_docs/version-2.3.0/deploy-monitoring.md
@@ -77,7 +77,7 @@ the `prometheusStatsHttpPort` in `conf/bookkeeper.conf`.
 You can configure Prometheus to collect and store the metrics data by following the Prometheus [Getting started](https://prometheus.io/docs/introduction/getting_started/) guide.
 
 When running on bare metal, you can provide the list of nodes that needs to be probed. When deploying
-in a Kubernetes cluster, the monitoring is automatically setup with the [provided](deploy-kubernetes)
+in a Kubernetes cluster, the monitoring is automatically setup with the [provided](deploy-kubernetes.md)
 instructions.
 
 ## Dashboards
diff --git a/site2/website/versioned_docs/version-2.3.0/functions-deploying.md b/site2/website/versioned_docs/version-2.3.0/functions-deploying.md
index fe10138bd76..19565c1c438 100644
--- a/site2/website/versioned_docs/version-2.3.0/functions-deploying.md
+++ b/site2/website/versioned_docs/version-2.3.0/functions-deploying.md
@@ -53,7 +53,7 @@ Tenant | Derived from the input topics' names. If the input topics are under the
 Namespace | Derived from the input topics' names. If the input topics are under the `asia` namespace under the `marketing` tenant---i.e. the topic names have the form `persistent://marketing/asia/{topicName}`, then the namespace will be `asia`.
 Output topic | `{input topic}-{function name}-output`. A function with an input topic name of `incoming` and a function name of `exclamation`, for example, would have an output topic of `incoming-exclamation-output`.
 Subscription type | For at-least-once and at-most-once [processing guarantees](functions-guarantees), the [`SHARED`](concepts-messaging.md#shared) is applied by default; for effectively-once guarantees, [`FAILOVER`](concepts-messaging.md#failover) is applied
-Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees)
+Processing guarantees | [`ATLEAST_ONCE`](functions-guarantees.md)
 Pulsar service URL | `pulsar://localhost:6650`
 
 #### Example use of defaults
diff --git a/site2/website/versioned_docs/version-2.3.0/functions-quickstart.md b/site2/website/versioned_docs/version-2.3.0/functions-quickstart.md
index a7ec5a7ab9a..40034409654 100644
--- a/site2/website/versioned_docs/version-2.3.0/functions-quickstart.md
+++ b/site2/website/versioned_docs/version-2.3.0/functions-quickstart.md
@@ -391,5 +391,5 @@ zip -r exclamation.zip exclamation
 Archive **exclamation.zip** can we deployed as function into a pulsar worker, the worker does not need internet connectivity to download packages as they are all included in the zip file.
 
 
-* [The Pulsar Functions API](functions-api)
-* [Deploying Pulsar Functions](functions-deploying)
+* [The Pulsar Functions API](functions-api.md)
+* [Deploying Pulsar Functions](functions-deploying.md)
diff --git a/site2/website/versioned_docs/version-2.3.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.3.0/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.3.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.3.0/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.3.0/getting-started-standalone.md b/site2/website/versioned_docs/version-2.3.0/getting-started-standalone.md
index cac7aafc3cd..e82283b002d 100644
--- a/site2/website/versioned_docs/version-2.3.0/getting-started-standalone.md
+++ b/site2/website/versioned_docs/version-2.3.0/getting-started-standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -146,7 +146,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.3.0/io-cdc.md b/site2/website/versioned_docs/version-2.3.0/io-cdc.md
index ff0095a4a5a..fcd045a9253 100644
--- a/site2/website/versioned_docs/version-2.3.0/io-cdc.md
+++ b/site2/website/versioned_docs/version-2.3.0/io-cdc.md
@@ -13,5 +13,5 @@ The CDC Source connector is built on top of [Debezium](https://debezium.io/) and
 This CDC Source are tested by using MySQL, and you could get more information regarding how it works at [this debezium link](https://debezium.io/docs/connectors/mysql/) or [this canal link](https://github.com/alibaba/canal/wiki).
 Regarding how Debezium works, please reference to [Debezium tutorial](https://debezium.io/docs/tutorial/). Regarding how Canal works, please reference to [Canal tutorial](https://github.com/alibaba/canal/wiki). It is recommended that you go through this tutorial first.
 
-- [Debezium Connector](io-cdc-debezium)
-- [Alibaba Canal Connector](io-cdc-canal)
\ No newline at end of file
+- [Debezium Connector](io-cdc-debezium.md)
+- [Alibaba Canal Connector](io-cdc-canal.md)
\ No newline at end of file
diff --git a/site2/website/versioned_docs/version-2.3.0/io-connectors.md b/site2/website/versioned_docs/version-2.3.0/io-connectors.md
index e4e8bad86bd..8c5d8dceeee 100644
--- a/site2/website/versioned_docs/version-2.3.0/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.3.0/io-connectors.md
@@ -10,13 +10,13 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
-- [Twitter Firehose Source Connector](io-twitter)
-- [CDC Source Connector based on Debezium and Canal](io-cdc)
+- [Twitter Firehose Source Connector](io-twitter.md)
+- [CDC Source Connector based on Debezium and Canal](io-cdc.md)
 - [Netty Source Connector](io-netty.md#source)
 - [Hbase Sink Connector](io-hbase.md#sink)
diff --git a/site2/website/versioned_docs/version-2.3.0/reference-configuration.md b/site2/website/versioned_docs/version-2.3.0/reference-configuration.md
index 02ca652ee4d..a44beafd76a 100644
--- a/site2/website/versioned_docs/version-2.3.0/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.3.0/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.3.0/security-overview.md b/site2/website/versioned_docs/version-2.3.0/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.3.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.3.0/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.3.0/security-token-admin.md b/site2/website/versioned_docs/version-2.3.0/security-token-admin.md
index 9424e83671b..4accb85a75a 100644
--- a/site2/website/versioned_docs/version-2.3.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.3.0/security-token-admin.md
@@ -28,7 +28,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.3.0/standalone-docker.md b/site2/website/versioned_docs/version-2.3.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.3.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.3.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.3.0/standalone.md b/site2/website/versioned_docs/version-2.3.0/standalone.md
index a396b46cfc9..6f3338a1dba 100644
--- a/site2/website/versioned_docs/version-2.3.0/standalone.md
+++ b/site2/website/versioned_docs/version-2.3.0/standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -146,7 +146,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.3.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.3.1/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.3.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.3.1/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.3.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.3.1/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.3.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.3.1/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.3.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.3.1/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.3.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.3.1/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.3.1/concepts-messaging.md b/site2/website/versioned_docs/version-2.3.1/concepts-messaging.md
index cc36775c0c5..4cb9dbaf1c8 100644
--- a/site2/website/versioned_docs/version-2.3.1/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.3.1/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.3.1/concepts-overview.md b/site2/website/versioned_docs/version-2.3.1/concepts-overview.md
index 4d13ea471a1..b71f204b3b4 100644
--- a/site2/website/versioned_docs/version-2.3.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.3.1/concepts-overview.md
@@ -21,12 +21,12 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
-- [Schema Registry](concepts-schema-registry)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
+- [Schema Registry](concepts-schema-registry.md)
diff --git a/site2/website/versioned_docs/version-2.3.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.3.1/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.3.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.3.1/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal-multi-cluster.md
index 5aefe021605..41ce8d55e66 100644
--- a/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal-multi-cluster.md
@@ -67,9 +67,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
diff --git a/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal.md
index acada66a82f..33ad5736a27 100644
--- a/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.3.1/deploy-bare-metal.md
@@ -99,7 +99,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -182,7 +182,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.3.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.3.1/getting-started-docker.md
index 47b0b7876a8..6d06377e85f 100644
--- a/site2/website/versioned_docs/version-2.3.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.3.1/getting-started-docker.md
@@ -65,7 +65,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.3.1/getting-started-standalone.md b/site2/website/versioned_docs/version-2.3.1/getting-started-standalone.md
index 73fc69b7eb6..fbbbfec4aba 100644
--- a/site2/website/versioned_docs/version-2.3.1/getting-started-standalone.md
+++ b/site2/website/versioned_docs/version-2.3.1/getting-started-standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -146,7 +146,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.3.1/io-connectors.md b/site2/website/versioned_docs/version-2.3.1/io-connectors.md
index 425e31a3bdd..a775a8e25e0 100644
--- a/site2/website/versioned_docs/version-2.3.1/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.3.1/io-connectors.md
@@ -10,15 +10,15 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
 - [RabbitMQ Sink Connector](io-rabbitmq.md#sink)
-- [Twitter Firehose Source Connector](io-twitter)
-- [CDC Source Connector based on Debezium](io-cdc)
+- [Twitter Firehose Source Connector](io-twitter.md)
+- [CDC Source Connector based on Debezium](io-cdc.md)
 - [Netty Source Connector](io-netty.md#source)
 - [Hbase Sink Connector](io-hbase.md#sink)
 - [ElasticSearch Sink Connector](io-elasticsearch.md#sink)
diff --git a/site2/website/versioned_docs/version-2.3.1/reference-configuration.md b/site2/website/versioned_docs/version-2.3.1/reference-configuration.md
index 6b8e1226663..1d837fe151d 100644
--- a/site2/website/versioned_docs/version-2.3.1/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.3.1/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.3.1/security-overview.md b/site2/website/versioned_docs/version-2.3.1/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.3.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.3.1/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.3.1/security-token-admin.md b/site2/website/versioned_docs/version-2.3.1/security-token-admin.md
index d9595a855e1..c0aabd249f4 100644
--- a/site2/website/versioned_docs/version-2.3.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.3.1/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.3.1/standalone-docker.md b/site2/website/versioned_docs/version-2.3.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.3.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.3.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.3.1/standalone.md b/site2/website/versioned_docs/version-2.3.1/standalone.md
index 287b0e698dc..a5d7c479081 100644
--- a/site2/website/versioned_docs/version-2.3.1/standalone.md
+++ b/site2/website/versioned_docs/version-2.3.1/standalone.md
@@ -50,9 +50,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's command-line tools, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar
 `licenses` | License files, in `.txt` form, for various components of the Pulsar [codebase](https://github.com/apache/pulsar)
 
@@ -61,7 +61,7 @@ These directories will be created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory used by ZooKeeper and BookKeeper
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs created by the installation
 
 
@@ -146,7 +146,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 > #### NOTES
 >
diff --git a/site2/website/versioned_docs/version-2.3.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.3.2/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.3.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.3.2/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.3.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.3.2/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.3.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.3.2/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.3.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.3.2/admin-api-namespaces.md
index 896ffc9a312..c73dbcfd3f2 100644
--- a/site2/website/versioned_docs/version-2.3.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.3.2/admin-api-namespaces.md
@@ -11,7 +11,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.3.2/concepts-clients.md b/site2/website/versioned_docs/version-2.3.2/concepts-clients.md
index 8751fc283a1..17d2a8d672d 100644
--- a/site2/website/versioned_docs/version-2.3.2/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.3.2/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.3.2/concepts-messaging.md b/site2/website/versioned_docs/version-2.3.2/concepts-messaging.md
index c954ffae137..cae451bb2b8 100644
--- a/site2/website/versioned_docs/version-2.3.2/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.3.2/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.3.2/concepts-overview.md b/site2/website/versioned_docs/version-2.3.2/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/website/versioned_docs/version-2.3.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.3.2/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.3.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.3.2/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.3.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.3.2/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal.md
index 282e59e52d2..66694767345 100644
--- a/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.3.2/deploy-bare-metal.md
@@ -99,7 +99,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -182,7 +182,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.3.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.3.2/getting-started-docker.md
index 8387c074c00..694a93c7341 100644
--- a/site2/website/versioned_docs/version-2.3.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.3.2/getting-started-docker.md
@@ -69,7 +69,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.3.2/io-connectors.md b/site2/website/versioned_docs/version-2.3.2/io-connectors.md
index e717c060628..6d410fab07c 100644
--- a/site2/website/versioned_docs/version-2.3.2/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.3.2/io-connectors.md
@@ -10,15 +10,15 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
 - [RabbitMQ Sink Connector](io-rabbitmq.md#sink)
-- [Twitter Firehose Source Connector](io-twitter)
-- [CDC Source Connector based on Debezium](io-cdc)
+- [Twitter Firehose Source Connector](io-twitter.md)
+- [CDC Source Connector based on Debezium](io-cdc.md)
 - [Netty Source Connector](io-netty.md#source)
 - [Hbase Sink Connector](io-hbase.md#sink)
 - [ElasticSearch Sink Connector](io-elasticsearch.md#sink)
diff --git a/site2/website/versioned_docs/version-2.3.2/reference-configuration.md b/site2/website/versioned_docs/version-2.3.2/reference-configuration.md
index 828faf17dbb..336a946141d 100644
--- a/site2/website/versioned_docs/version-2.3.2/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.3.2/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 * [BookKeeper](#bookkeeper)
 * [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.3.2/security-overview.md b/site2/website/versioned_docs/version-2.3.2/security-overview.md
index d64ce44409e..0b40dceba0f 100644
--- a/site2/website/versioned_docs/version-2.3.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.3.2/security-overview.md
@@ -28,15 +28,15 @@ role token is then used for [Authorization and ACLs](security-authorization) to
 
 Currently Pulsar supports two authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
 
 ## Contents
 
 - [Encryption](security-tls-transport.md) and [Authentication](security-tls-authentication) using TLS
-- [Authentication using Athenz](security-athenz)
-- [Authentication using Kerberos](security-kerberos)
-- [Authorization and ACLs](security-authorization)
-- [End-to-End Encryption](security-encryption)
+- [Authentication using Athenz](security-athenz.md)
+- [Authentication using Kerberos](security-kerberos.md)
+- [Authorization and ACLs](security-authorization.md)
+- [End-to-End Encryption](security-encryption.md)
 
diff --git a/site2/website/versioned_docs/version-2.3.2/security-token-admin.md b/site2/website/versioned_docs/version-2.3.2/security-token-admin.md
index 9424e83671b..4accb85a75a 100644
--- a/site2/website/versioned_docs/version-2.3.2/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.3.2/security-token-admin.md
@@ -28,7 +28,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.3.2/standalone-docker.md b/site2/website/versioned_docs/version-2.3.2/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.3.2/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.3.2/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.4.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.4.0/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.4.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.4.0/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.4.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.4.0/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.4.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.4.0/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.4.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.4.0/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.4.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.4.0/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.4.0/concepts-messaging.md b/site2/website/versioned_docs/version-2.4.0/concepts-messaging.md
index 791fe2e7f02..a4496d7727f 100644
--- a/site2/website/versioned_docs/version-2.4.0/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.4.0/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](concepts-schema-registry.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.4.0/concepts-overview.md b/site2/website/versioned_docs/version-2.4.0/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/website/versioned_docs/version-2.4.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.4.0/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.4.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.4.0/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.4.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.4.0/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal.md
index a99130fab7d..0da5f4d027d 100644
--- a/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.4.0/deploy-bare-metal.md
@@ -101,7 +101,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -184,7 +184,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.4.0/functions-api.md b/site2/website/versioned_docs/version-2.4.0/functions-api.md
index ee4fe9089b9..21608eaed32 100644
--- a/site2/website/versioned_docs/version-2.4.0/functions-api.md
+++ b/site2/website/versioned_docs/version-2.4.0/functions-api.md
@@ -127,7 +127,7 @@ Both the [Java](#java-sdk-functions) and [Python](#python-sdk-functions) SDKs pr
 * The version of the function
 * The [logger object](functions-overview.md#logging) used by the function, which can be used to create function log messages
 * Access to arbitrary [user config](#user-config) values supplied via the CLI
-* An interface for recording [metrics](functions-metrics)
+* An interface for recording [metrics](functions-metrics.md)
 * An interface for storing and retrieving state in [state storage](functions-overview.md#state-storage)
 * A function to publish new messages onto arbitrary topics.
 * A function to acknowledge the message being processed (if auto-acknowledgement is disabled).
diff --git a/site2/website/versioned_docs/version-2.4.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.4.0/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.4.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.4.0/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.4.0/reference-configuration.md b/site2/website/versioned_docs/version-2.4.0/reference-configuration.md
index d8e186a65e8..c7091737c29 100644
--- a/site2/website/versioned_docs/version-2.4.0/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.4.0/reference-configuration.md
@@ -9,7 +9,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.4.0/security-overview.md b/site2/website/versioned_docs/version-2.4.0/security-overview.md
index d47c910b509..f9a623334eb 100644
--- a/site2/website/versioned_docs/version-2.4.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.4.0/security-overview.md
@@ -23,16 +23,16 @@ Apache Pulsar uses the [Authentication Provider](#authentication-providers) to e
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 ## Contents
 
 - [Encryption](security-tls-transport.md) and [Authentication](security-tls-authentication) using TLS
-- [Authentication using Athenz](security-athenz)
-- [Authentication using Kerberos](security-kerberos)
-- [Authorization and ACLs](security-authorization)
-- [End-to-End Encryption](security-encryption)
+- [Authentication using Athenz](security-athenz.md)
+- [Authentication using Kerberos](security-kerberos.md)
+- [Authorization and ACLs](security-authorization.md)
+- [End-to-End Encryption](security-encryption.md)
 
diff --git a/site2/website/versioned_docs/version-2.4.0/security-token-admin.md b/site2/website/versioned_docs/version-2.4.0/security-token-admin.md
index c429bdc9031..89e06c2dcd9 100644
--- a/site2/website/versioned_docs/version-2.4.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.4.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.4.0/standalone-docker.md b/site2/website/versioned_docs/version-2.4.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.4.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.4.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.4.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.4.1/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.4.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.4.1/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.4.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.4.1/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.4.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.4.1/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.4.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.4.1/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.4.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.4.1/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.4.1/concepts-messaging.md b/site2/website/versioned_docs/version-2.4.1/concepts-messaging.md
index 89e13d134f2..f55e8cfe42f 100644
--- a/site2/website/versioned_docs/version-2.4.1/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.4.1/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](schema-get-started)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](schema-get-started.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.4.1/concepts-overview.md b/site2/website/versioned_docs/version-2.4.1/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/website/versioned_docs/version-2.4.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.4.1/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.4.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.4.1/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.4.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.4.1/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal.md
index a99130fab7d..0da5f4d027d 100644
--- a/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.4.1/deploy-bare-metal.md
@@ -101,7 +101,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -184,7 +184,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.4.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.4.1/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.4.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.4.1/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.4.1/io-connectors.md b/site2/website/versioned_docs/version-2.4.1/io-connectors.md
index f434f8759e6..3199417cdee 100644
--- a/site2/website/versioned_docs/version-2.4.1/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.4.1/io-connectors.md
@@ -10,15 +10,15 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
 - [RabbitMQ Sink Connector](io-rabbitmq.md#sink)
-- [Twitter Firehose Source Connector](io-twitter)
-- [CDC Source Connector based on Debezium](io-cdc)
+- [Twitter Firehose Source Connector](io-twitter.md)
+- [CDC Source Connector based on Debezium](io-cdc.md)
 - [Netty Source Connector](io-netty.md#source)
 - [Hbase Sink Connector](io-hbase.md#sink)
 - [ElasticSearch Sink Connector](io-elasticsearch.md#sink)
@@ -28,4 +28,4 @@ Pulsar Functions cluster.
 - [Redis Sink Connector](io-redis.md#sink)
 - [Solr Sink Connector](io-solr.md#sink)
 - [InfluxDB Sink Connector](io-influxdb.md#sink)
-- [JDBC Sink Connector](io-jdbc)
+- [JDBC Sink Connector](io-jdbc.md)
diff --git a/site2/website/versioned_docs/version-2.4.1/reference-configuration.md b/site2/website/versioned_docs/version-2.4.1/reference-configuration.md
index d8e186a65e8..c7091737c29 100644
--- a/site2/website/versioned_docs/version-2.4.1/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.4.1/reference-configuration.md
@@ -9,7 +9,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.4.1/security-overview.md b/site2/website/versioned_docs/version-2.4.1/security-overview.md
index d47c910b509..f9a623334eb 100644
--- a/site2/website/versioned_docs/version-2.4.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.4.1/security-overview.md
@@ -23,16 +23,16 @@ Apache Pulsar uses the [Authentication Provider](#authentication-providers) to e
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 ## Contents
 
 - [Encryption](security-tls-transport.md) and [Authentication](security-tls-authentication) using TLS
-- [Authentication using Athenz](security-athenz)
-- [Authentication using Kerberos](security-kerberos)
-- [Authorization and ACLs](security-authorization)
-- [End-to-End Encryption](security-encryption)
+- [Authentication using Athenz](security-athenz.md)
+- [Authentication using Kerberos](security-kerberos.md)
+- [Authorization and ACLs](security-authorization.md)
+- [End-to-End Encryption](security-encryption.md)
 
diff --git a/site2/website/versioned_docs/version-2.4.1/security-token-admin.md b/site2/website/versioned_docs/version-2.4.1/security-token-admin.md
index 9424e83671b..4accb85a75a 100644
--- a/site2/website/versioned_docs/version-2.4.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.4.1/security-token-admin.md
@@ -28,7 +28,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.4.1/standalone-docker.md b/site2/website/versioned_docs/version-2.4.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.4.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.4.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.4.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.4.2/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.4.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.4.2/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.4.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.4.2/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.4.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.4.2/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.4.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.4.2/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.4.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.4.2/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.4.2/concepts-messaging.md b/site2/website/versioned_docs/version-2.4.2/concepts-messaging.md
index 89e13d134f2..f55e8cfe42f 100644
--- a/site2/website/versioned_docs/version-2.4.2/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.4.2/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](schema-get-started)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](schema-get-started.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.4.2/concepts-overview.md b/site2/website/versioned_docs/version-2.4.2/concepts-overview.md
index a8e5c0fc2ac..37a3bc8c04d 100644
--- a/site2/website/versioned_docs/version-2.4.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.4.2/concepts-overview.md
@@ -20,11 +20,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.4.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.4.2/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.4.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.4.2/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal.md
index a99130fab7d..0da5f4d027d 100644
--- a/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.4.2/deploy-bare-metal.md
@@ -101,7 +101,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | Pulsar's [command-line tools](reference-cli-tools.md), such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory used by ZooKeeper and BookKeeper.
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files used by Pulsar.
@@ -184,7 +184,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you could reference this [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploying a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.4.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.4.2/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.4.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.4.2/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.4.2/io-connectors.md b/site2/website/versioned_docs/version-2.4.2/io-connectors.md
index f434f8759e6..3199417cdee 100644
--- a/site2/website/versioned_docs/version-2.4.2/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.4.2/io-connectors.md
@@ -10,15 +10,15 @@ These connectors import and export data from some of the most commonly used data
 as easy as writing a simple connector configuration and running the connector locally or submitting the connector to a
 Pulsar Functions cluster.
 
-- [Aerospike Sink Connector](io-aerospike)
-- [Cassandra Sink Connector](io-cassandra)
+- [Aerospike Sink Connector](io-aerospike.md)
+- [Cassandra Sink Connector](io-cassandra.md)
 - [Kafka Sink Connector](io-kafka.md#sink)
 - [Kafka Source Connector](io-kafka.md#source)
 - [Kinesis Sink Connector](io-kinesis.md#sink)
 - [RabbitMQ Source Connector](io-rabbitmq.md#source)
 - [RabbitMQ Sink Connector](io-rabbitmq.md#sink)
-- [Twitter Firehose Source Connector](io-twitter)
-- [CDC Source Connector based on Debezium](io-cdc)
+- [Twitter Firehose Source Connector](io-twitter.md)
+- [CDC Source Connector based on Debezium](io-cdc.md)
 - [Netty Source Connector](io-netty.md#source)
 - [Hbase Sink Connector](io-hbase.md#sink)
 - [ElasticSearch Sink Connector](io-elasticsearch.md#sink)
@@ -28,4 +28,4 @@ Pulsar Functions cluster.
 - [Redis Sink Connector](io-redis.md#sink)
 - [Solr Sink Connector](io-solr.md#sink)
 - [InfluxDB Sink Connector](io-influxdb.md#sink)
-- [JDBC Sink Connector](io-jdbc)
+- [JDBC Sink Connector](io-jdbc.md)
diff --git a/site2/website/versioned_docs/version-2.4.2/reference-configuration.md b/site2/website/versioned_docs/version-2.4.2/reference-configuration.md
index c68a65ae3ff..cdec100efae 100644
--- a/site2/website/versioned_docs/version-2.4.2/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.4.2/reference-configuration.md
@@ -9,7 +9,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.4.2/security-overview.md b/site2/website/versioned_docs/version-2.4.2/security-overview.md
index d47c910b509..f9a623334eb 100644
--- a/site2/website/versioned_docs/version-2.4.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.4.2/security-overview.md
@@ -23,16 +23,16 @@ Apache Pulsar uses the [Authentication Provider](#authentication-providers) to e
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 ## Contents
 
 - [Encryption](security-tls-transport.md) and [Authentication](security-tls-authentication) using TLS
-- [Authentication using Athenz](security-athenz)
-- [Authentication using Kerberos](security-kerberos)
-- [Authorization and ACLs](security-authorization)
-- [End-to-End Encryption](security-encryption)
+- [Authentication using Athenz](security-athenz.md)
+- [Authentication using Kerberos](security-kerberos.md)
+- [Authorization and ACLs](security-authorization.md)
+- [End-to-End Encryption](security-encryption.md)
 
diff --git a/site2/website/versioned_docs/version-2.4.2/security-token-admin.md b/site2/website/versioned_docs/version-2.4.2/security-token-admin.md
index 9424e83671b..4accb85a75a 100644
--- a/site2/website/versioned_docs/version-2.4.2/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.4.2/security-token-admin.md
@@ -28,7 +28,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.4.2/standalone-docker.md b/site2/website/versioned_docs/version-2.4.2/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.4.2/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.4.2/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.5.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.5.0/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.5.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.5.0/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.5.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.5.0/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.5.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.5.0/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.5.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.5.0/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.5.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.5.0/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.5.0/concepts-clients.md b/site2/website/versioned_docs/version-2.5.0/concepts-clients.md
index 29d27fa8ca8..72342f3bdd7 100644
--- a/site2/website/versioned_docs/version-2.5.0/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.5.0/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.5.0/concepts-messaging.md b/site2/website/versioned_docs/version-2.5.0/concepts-messaging.md
index 4aac64b8d74..a7727a91a66 100644
--- a/site2/website/versioned_docs/version-2.5.0/concepts-messaging.md
+++ b/site2/website/versioned_docs/version-2.5.0/concepts-messaging.md
@@ -15,8 +15,8 @@ Messages are the basic "unit" of Pulsar. They're what producers publish to topic
 
 Component | Purpose
 :---------|:-------
-Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](schema-get-started)
-Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction)
+Value / data payload | The data carried by the message. All Pulsar messages carry raw bytes, although message data can also conform to data [schemas](schema-get-started.md)
+Key | Messages can optionally be tagged with keys, which can be useful for things like [topic compaction](concepts-topic-compaction.md)
 Properties | An optional key/value map of user-defined properties
 Producer name | The name of the producer that produced the message (producers are automatically given default names, but you can apply your own explicitly as well)
 Sequence ID | Each Pulsar message belongs to an ordered sequence on its topic. A message's sequence ID is its ordering in that sequence.
diff --git a/site2/website/versioned_docs/version-2.5.0/concepts-overview.md b/site2/website/versioned_docs/version-2.5.0/concepts-overview.md
index 6b6d2d9d5fc..468a4a82f7b 100644
--- a/site2/website/versioned_docs/version-2.5.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.5.0/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.5.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.5.0/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.5.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.5.0/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal-multi-cluster.md
index 2665fc9aae4..b02ba3fbec3 100644
--- a/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal-multi-cluster.md
@@ -67,9 +67,9 @@ The Pulsar binary package initially contains the following directories:
 
 Directory | Contains
 :---------|:--------
-`bin` | [Command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` | [Command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal.md
index 79c933734f7..2abc2b2b5cf 100644
--- a/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.5.0/deploy-bare-metal.md
@@ -101,7 +101,7 @@ The untarred directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory that ZooKeeper and BookKeeper use
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.5.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.5.0/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.5.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.5.0/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.5.0/helm-overview.md b/site2/website/versioned_docs/version-2.5.0/helm-overview.md
index 6f68381f23a..96e568c6799 100644
--- a/site2/website/versioned_docs/version-2.5.0/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.5.0/helm-overview.md
@@ -76,8 +76,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 If you are just looking to deploy a Proof of Concept for testing,
 we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.5.0/io-connectors.md b/site2/website/versioned_docs/version-2.5.0/io-connectors.md
index 54ac60a63f3..46e4a8133fd 100644
--- a/site2/website/versioned_docs/version-2.5.0/io-connectors.md
+++ b/site2/website/versioned_docs/version-2.5.0/io-connectors.md
@@ -121,7 +121,7 @@ Pulsar has various sink connectors, which are sorted alphabetically as below.
 
 ### HBase
 
-* [Configuration](io-hbase)
+* [Configuration](io-hbase.md)
   
 * [Java class](https://github.com/apache/pulsar/blob/master/pulsar-io/hbase/src/main/java/org/apache/pulsar/io/hbase/HbaseAbstractConfig.java)
   
diff --git a/site2/website/versioned_docs/version-2.5.0/reference-configuration.md b/site2/website/versioned_docs/version-2.5.0/reference-configuration.md
index 2980d4e838c..388b85e248a 100644
--- a/site2/website/versioned_docs/version-2.5.0/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.5.0/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed either via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.5.0/security-overview.md b/site2/website/versioned_docs/version-2.5.0/security-overview.md
index aa03014e67a..964f579305b 100644
--- a/site2/website/versioned_docs/version-2.5.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.5.0/security-overview.md
@@ -23,9 +23,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.5.0/security-token-admin.md b/site2/website/versioned_docs/version-2.5.0/security-token-admin.md
index 2dd9340859c..01f156c6c49 100644
--- a/site2/website/versioned_docs/version-2.5.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.5.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.5.0/standalone-docker.md b/site2/website/versioned_docs/version-2.5.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.5.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.5.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.5.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.5.1/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.5.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.5.1/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.5.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.5.1/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.5.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.5.1/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.5.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.5.1/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.5.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.5.1/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.5.1/client-libraries-go.md b/site2/website/versioned_docs/version-2.5.1/client-libraries-go.md
index 46f634233f8..7110ab6b6b2 100644
--- a/site2/website/versioned_docs/version-2.5.1/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.5.1/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.5.1/client-libraries.md b/site2/website/versioned_docs/version-2.5.1/client-libraries.md
index 784087ccc74..e534d466bd2 100644
--- a/site2/website/versioned_docs/version-2.5.1/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.5.1/client-libraries.md
@@ -7,12 +7,12 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.5.1/concepts-overview.md b/site2/website/versioned_docs/version-2.5.1/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.5.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.5.1/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.5.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.5.1/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.5.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.5.1/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal.md
index 47c91bbd043..4565eada114 100644
--- a/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.5.1/deploy-bare-metal.md
@@ -101,7 +101,7 @@ The extracted directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory that ZooKeeper and BookKeeper use
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.5.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.5.1/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.5.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.5.1/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.5.1/helm-overview.md b/site2/website/versioned_docs/version-2.5.1/helm-overview.md
index 474183bf4c6..9afa1533bba 100644
--- a/site2/website/versioned_docs/version-2.5.1/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.5.1/helm-overview.md
@@ -65,8 +65,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.5.1/reference-configuration.md b/site2/website/versioned_docs/version-2.5.1/reference-configuration.md
index 5b16dedda77..5d3ea0d2694 100644
--- a/site2/website/versioned_docs/version-2.5.1/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.5.1/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.5.1/security-overview.md b/site2/website/versioned_docs/version-2.5.1/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.5.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.5.1/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.5.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.5.2/admin-api-brokers.md
index accaac4f2e7..5a540145b0c 100644
--- a/site2/website/versioned_docs/version-2.5.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.5.2/admin-api-brokers.md
@@ -29,7 +29,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.5.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.5.2/admin-api-clusters.md
index 418626f3091..04db2f60759 100644
--- a/site2/website/versioned_docs/version-2.5.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.5.2/admin-api-clusters.md
@@ -27,7 +27,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.5.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.5.2/admin-api-namespaces.md
index 89b83713a99..e4e099489db 100644
--- a/site2/website/versioned_docs/version-2.5.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.5.2/admin-api-namespaces.md
@@ -26,7 +26,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.5.2/client-libraries-go.md b/site2/website/versioned_docs/version-2.5.2/client-libraries-go.md
index 46f634233f8..7110ab6b6b2 100644
--- a/site2/website/versioned_docs/version-2.5.2/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.5.2/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.5.2/client-libraries.md b/site2/website/versioned_docs/version-2.5.2/client-libraries.md
index 0bbc5905eba..befd452e78b 100644
--- a/site2/website/versioned_docs/version-2.5.2/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.5.2/client-libraries.md
@@ -7,12 +7,12 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.5.2/concepts-overview.md b/site2/website/versioned_docs/version-2.5.2/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.5.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.5.2/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.5.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.5.2/concepts-topic-compaction.md
index 33562982733..790ce76b7c5 100644
--- a/site2/website/versioned_docs/version-2.5.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.5.2/concepts-topic-compaction.md
@@ -14,7 +14,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal-multi-cluster.md
index cc11172191a..70dff45080b 100644
--- a/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal.md
index 47c91bbd043..4565eada114 100644
--- a/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.5.2/deploy-bare-metal.md
@@ -101,7 +101,7 @@ The extracted directory contains the following subdirectories:
 
 Directory | Contains
 :---------|:--------
-`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin)
+`bin` |[command-line tools](reference-cli-tools.md) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](reference-pulsar-admin.md)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
 `data` | The data storage directory that ZooKeeper and BookKeeper use
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.5.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.5.2/getting-started-docker.md
index c0723a61f25..26908245cb2 100644
--- a/site2/website/versioned_docs/version-2.5.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.5.2/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.5.2/helm-overview.md b/site2/website/versioned_docs/version-2.5.2/helm-overview.md
index 474183bf4c6..9afa1533bba 100644
--- a/site2/website/versioned_docs/version-2.5.2/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.5.2/helm-overview.md
@@ -65,8 +65,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.5.2/reference-configuration.md b/site2/website/versioned_docs/version-2.5.2/reference-configuration.md
index be40b582c02..0ef80758c0b 100644
--- a/site2/website/versioned_docs/version-2.5.2/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.5.2/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.5.2/security-overview.md b/site2/website/versioned_docs/version-2.5.2/security-overview.md
index 8cbaa0926aa..2f3fc035ad4 100644
--- a/site2/website/versioned_docs/version-2.5.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.5.2/security-overview.md
@@ -26,11 +26,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS authentication](security-tls-authentication)
-- [Athenz authentication](security-athenz)
-- [Kerberos authentication](security-kerberos)
-- [JSON Web Token (JWT) authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
+- [TLS authentication](security-tls-authentication.md)
+- [Athenz authentication](security-athenz.md)
+- [Kerberos authentication](security-kerberos.md)
+- [JSON Web Token (JWT) authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
 - Basic authentication
 
 
diff --git a/site2/website/versioned_docs/version-2.5.2/standalone-docker.md b/site2/website/versioned_docs/version-2.5.2/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.5.2/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.5.2/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.6.0/admin-api-brokers.md
index 4371e2ba02b..bdd6ff555ac 100644
--- a/site2/website/versioned_docs/version-2.6.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.6.0/admin-api-brokers.md
@@ -14,7 +14,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.6.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.6.0/admin-api-clusters.md
index 3662e9b4df8..efd50a4c4b0 100644
--- a/site2/website/versioned_docs/version-2.6.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.6.0/admin-api-clusters.md
@@ -12,7 +12,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.6.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.6.0/admin-api-namespaces.md
index 896ffc9a312..c73dbcfd3f2 100644
--- a/site2/website/versioned_docs/version-2.6.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.6.0/admin-api-namespaces.md
@@ -11,7 +11,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.6.0/client-libraries-go.md b/site2/website/versioned_docs/version-2.6.0/client-libraries-go.md
index e976144c24c..67b9ed3897f 100644
--- a/site2/website/versioned_docs/version-2.6.0/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.6.0/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.6.0/client-libraries.md b/site2/website/versioned_docs/version-2.6.0/client-libraries.md
index 11efc7d071e..370d036986c 100644
--- a/site2/website/versioned_docs/version-2.6.0/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.6.0/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.6.0/concepts-clients.md b/site2/website/versioned_docs/version-2.6.0/concepts-clients.md
index 59507c06383..56faae16cce 100644
--- a/site2/website/versioned_docs/version-2.6.0/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.6.0/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.6.0/concepts-overview.md b/site2/website/versioned_docs/version-2.6.0/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.6.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.6.0/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.6.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.6.0/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.6.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.6.0/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal.md
index 54dcdf757d2..35447d6e3e5 100644
--- a/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.6.0/deploy-bare-metal.md
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.6.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.6.0/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.6.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.6.0/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.0/helm-overview.md b/site2/website/versioned_docs/version-2.6.0/helm-overview.md
index eaf0b96b068..53633e28825 100644
--- a/site2/website/versioned_docs/version-2.6.0/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.6.0/helm-overview.md
@@ -67,8 +67,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.6.0/reference-configuration.md b/site2/website/versioned_docs/version-2.6.0/reference-configuration.md
index 8ac18c13b51..bd50b294bf5 100644
--- a/site2/website/versioned_docs/version-2.6.0/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.6.0/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.6.0/security-overview.md b/site2/website/versioned_docs/version-2.6.0/security-overview.md
index aa03014e67a..964f579305b 100644
--- a/site2/website/versioned_docs/version-2.6.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.6.0/security-overview.md
@@ -23,9 +23,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.6.0/security-tls-keystore.md b/site2/website/versioned_docs/version-2.6.0/security-tls-keystore.md
index e813912c3bb..e6412ab6a86 100644
--- a/site2/website/versioned_docs/version-2.6.0/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.6.0/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.6.0/security-token-admin.md b/site2/website/versioned_docs/version-2.6.0/security-token-admin.md
index 16791938803..6bef23b1064 100644
--- a/site2/website/versioned_docs/version-2.6.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.6.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.6.0/standalone-docker.md b/site2/website/versioned_docs/version-2.6.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.6.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.6.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.6.1/admin-api-brokers.md
index 4371e2ba02b..bdd6ff555ac 100644
--- a/site2/website/versioned_docs/version-2.6.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.6.1/admin-api-brokers.md
@@ -14,7 +14,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.6.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.6.1/admin-api-clusters.md
index 3662e9b4df8..efd50a4c4b0 100644
--- a/site2/website/versioned_docs/version-2.6.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.6.1/admin-api-clusters.md
@@ -12,7 +12,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.6.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.6.1/admin-api-namespaces.md
index 88582abe3e4..bc8e72c0b29 100644
--- a/site2/website/versioned_docs/version-2.6.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.6.1/admin-api-namespaces.md
@@ -11,7 +11,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.6.1/client-libraries-go.md b/site2/website/versioned_docs/version-2.6.1/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.6.1/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.6.1/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.6.1/client-libraries.md b/site2/website/versioned_docs/version-2.6.1/client-libraries.md
index 11efc7d071e..370d036986c 100644
--- a/site2/website/versioned_docs/version-2.6.1/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.6.1/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.6.1/concepts-clients.md b/site2/website/versioned_docs/version-2.6.1/concepts-clients.md
index 9772ebf7bb8..3492c8071ca 100644
--- a/site2/website/versioned_docs/version-2.6.1/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.6.1/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.6.1/concepts-overview.md b/site2/website/versioned_docs/version-2.6.1/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.6.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.6.1/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.6.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.6.1/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.6.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.6.1/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal.md
index 0e33a6b7428..2c341748b56 100644
--- a/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.6.1/deploy-bare-metal.md
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.6.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.6.1/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.6.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.6.1/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.1/helm-overview.md b/site2/website/versioned_docs/version-2.6.1/helm-overview.md
index 679fb4f3cfb..a77499e81ae 100644
--- a/site2/website/versioned_docs/version-2.6.1/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.6.1/helm-overview.md
@@ -67,8 +67,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.6.1/reference-configuration.md b/site2/website/versioned_docs/version-2.6.1/reference-configuration.md
index 5b96f5e2bc9..dd766d1dc74 100644
--- a/site2/website/versioned_docs/version-2.6.1/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.6.1/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.6.1/security-overview.md b/site2/website/versioned_docs/version-2.6.1/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.6.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.6.1/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.6.1/security-tls-keystore.md b/site2/website/versioned_docs/version-2.6.1/security-tls-keystore.md
index e813912c3bb..e6412ab6a86 100644
--- a/site2/website/versioned_docs/version-2.6.1/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.6.1/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.6.1/security-token-admin.md b/site2/website/versioned_docs/version-2.6.1/security-token-admin.md
index 16791938803..6bef23b1064 100644
--- a/site2/website/versioned_docs/version-2.6.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.6.1/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.6.1/standalone-docker.md b/site2/website/versioned_docs/version-2.6.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.6.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.6.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.6.2/admin-api-brokers.md
index 4371e2ba02b..bdd6ff555ac 100644
--- a/site2/website/versioned_docs/version-2.6.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.6.2/admin-api-brokers.md
@@ -14,7 +14,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.6.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.6.2/admin-api-clusters.md
index 3662e9b4df8..efd50a4c4b0 100644
--- a/site2/website/versioned_docs/version-2.6.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.6.2/admin-api-clusters.md
@@ -12,7 +12,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.6.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.6.2/admin-api-namespaces.md
index 1b780df0bbe..f5ee8f44528 100644
--- a/site2/website/versioned_docs/version-2.6.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.6.2/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.6.2/client-libraries-go.md b/site2/website/versioned_docs/version-2.6.2/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.6.2/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.6.2/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.6.2/client-libraries.md b/site2/website/versioned_docs/version-2.6.2/client-libraries.md
index 11efc7d071e..370d036986c 100644
--- a/site2/website/versioned_docs/version-2.6.2/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.6.2/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.6.2/concepts-clients.md b/site2/website/versioned_docs/version-2.6.2/concepts-clients.md
index 9772ebf7bb8..3492c8071ca 100644
--- a/site2/website/versioned_docs/version-2.6.2/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.6.2/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.6.2/concepts-overview.md b/site2/website/versioned_docs/version-2.6.2/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.6.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.6.2/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.6.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.6.2/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.6.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.6.2/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal.md
index 0e33a6b7428..2c341748b56 100644
--- a/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.6.2/deploy-bare-metal.md
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.6.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.6.2/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.6.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.6.2/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.2/helm-overview.md b/site2/website/versioned_docs/version-2.6.2/helm-overview.md
index 679fb4f3cfb..a77499e81ae 100644
--- a/site2/website/versioned_docs/version-2.6.2/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.6.2/helm-overview.md
@@ -67,8 +67,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.6.2/reference-configuration.md b/site2/website/versioned_docs/version-2.6.2/reference-configuration.md
index 56ec3db49bc..d7f5acfb438 100644
--- a/site2/website/versioned_docs/version-2.6.2/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.6.2/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.6.2/security-overview.md b/site2/website/versioned_docs/version-2.6.2/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.6.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.6.2/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.6.2/security-tls-keystore.md b/site2/website/versioned_docs/version-2.6.2/security-tls-keystore.md
index e813912c3bb..e6412ab6a86 100644
--- a/site2/website/versioned_docs/version-2.6.2/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.6.2/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.6.2/security-token-admin.md b/site2/website/versioned_docs/version-2.6.2/security-token-admin.md
index 16791938803..6bef23b1064 100644
--- a/site2/website/versioned_docs/version-2.6.2/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.6.2/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.6.2/standalone-docker.md b/site2/website/versioned_docs/version-2.6.2/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.6.2/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.6.2/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.3/admin-api-brokers.md b/site2/website/versioned_docs/version-2.6.3/admin-api-brokers.md
index 4371e2ba02b..bdd6ff555ac 100644
--- a/site2/website/versioned_docs/version-2.6.3/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.6.3/admin-api-brokers.md
@@ -14,7 +14,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.6.3/admin-api-clusters.md b/site2/website/versioned_docs/version-2.6.3/admin-api-clusters.md
index 3662e9b4df8..efd50a4c4b0 100644
--- a/site2/website/versioned_docs/version-2.6.3/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.6.3/admin-api-clusters.md
@@ -12,7 +12,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.6.3/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.6.3/admin-api-namespaces.md
index 1b780df0bbe..f5ee8f44528 100644
--- a/site2/website/versioned_docs/version-2.6.3/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.6.3/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.6.3/client-libraries-go.md b/site2/website/versioned_docs/version-2.6.3/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.6.3/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.6.3/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.6.3/client-libraries.md b/site2/website/versioned_docs/version-2.6.3/client-libraries.md
index 11efc7d071e..370d036986c 100644
--- a/site2/website/versioned_docs/version-2.6.3/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.6.3/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.6.3/concepts-clients.md b/site2/website/versioned_docs/version-2.6.3/concepts-clients.md
index 9772ebf7bb8..3492c8071ca 100644
--- a/site2/website/versioned_docs/version-2.6.3/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.6.3/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.6.3/concepts-overview.md b/site2/website/versioned_docs/version-2.6.3/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.6.3/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.6.3/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.6.3/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.6.3/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.6.3/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.6.3/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal.md
index 0e33a6b7428..2c341748b56 100644
--- a/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.6.3/deploy-bare-metal.md
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.6.3/getting-started-docker.md b/site2/website/versioned_docs/version-2.6.3/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.6.3/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.6.3/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.3/helm-overview.md b/site2/website/versioned_docs/version-2.6.3/helm-overview.md
index 679fb4f3cfb..a77499e81ae 100644
--- a/site2/website/versioned_docs/version-2.6.3/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.6.3/helm-overview.md
@@ -67,8 +67,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.6.3/reference-configuration.md b/site2/website/versioned_docs/version-2.6.3/reference-configuration.md
index e3485bd95f9..4af045346cc 100644
--- a/site2/website/versioned_docs/version-2.6.3/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.6.3/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.6.3/security-overview.md b/site2/website/versioned_docs/version-2.6.3/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.6.3/security-overview.md
+++ b/site2/website/versioned_docs/version-2.6.3/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.6.3/security-tls-keystore.md b/site2/website/versioned_docs/version-2.6.3/security-tls-keystore.md
index 0f02664e82b..062d903e0e2 100644
--- a/site2/website/versioned_docs/version-2.6.3/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.6.3/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.6.3/security-token-admin.md b/site2/website/versioned_docs/version-2.6.3/security-token-admin.md
index 784797a52ec..10e91f9d30f 100644
--- a/site2/website/versioned_docs/version-2.6.3/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.6.3/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.6.3/standalone-docker.md b/site2/website/versioned_docs/version-2.6.3/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.6.3/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.6.3/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.4/admin-api-brokers.md b/site2/website/versioned_docs/version-2.6.4/admin-api-brokers.md
index d985bf29a84..dad66178e41 100644
--- a/site2/website/versioned_docs/version-2.6.4/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.6.4/admin-api-brokers.md
@@ -14,7 +14,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.6.4/admin-api-clusters.md b/site2/website/versioned_docs/version-2.6.4/admin-api-clusters.md
index 3662e9b4df8..efd50a4c4b0 100644
--- a/site2/website/versioned_docs/version-2.6.4/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.6.4/admin-api-clusters.md
@@ -12,7 +12,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.6.4/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.6.4/admin-api-namespaces.md
index dfd5e815d7f..910f0e90b32 100644
--- a/site2/website/versioned_docs/version-2.6.4/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.6.4/admin-api-namespaces.md
@@ -11,7 +11,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.6.4/client-libraries-go.md b/site2/website/versioned_docs/version-2.6.4/client-libraries-go.md
index c23aaec1705..d72ceedf6b4 100644
--- a/site2/website/versioned_docs/version-2.6.4/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.6.4/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.6.4/client-libraries.md b/site2/website/versioned_docs/version-2.6.4/client-libraries.md
index 11efc7d071e..370d036986c 100644
--- a/site2/website/versioned_docs/version-2.6.4/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.6.4/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.6.4/concepts-clients.md b/site2/website/versioned_docs/version-2.6.4/concepts-clients.md
index 6cc037dae71..88fe80b8c63 100644
--- a/site2/website/versioned_docs/version-2.6.4/concepts-clients.md
+++ b/site2/website/versioned_docs/version-2.6.4/concepts-clients.md
@@ -10,7 +10,7 @@ Pulsar exposes a client API with language bindings for [Java](client-libraries-j
 Under the hood, the current official Pulsar client libraries support transparent reconnection and/or connection failover to brokers, queuing of messages until acknowledged by the broker, and heuristics such as connection retries with backoff.
 
 > #### Custom client libraries
-> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol)
+> If you'd like to create your own client library, we recommend consulting the documentation on Pulsar's custom [binary protocol](developing-binary-protocol.md)
 
 
 ## Client setup phase
diff --git a/site2/website/versioned_docs/version-2.6.4/concepts-overview.md b/site2/website/versioned_docs/version-2.6.4/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.6.4/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.6.4/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.6.4/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.6.4/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.6.4/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.6.4/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal.md
index 95374ff077e..5b69db21ac4 100644
--- a/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.6.4/deploy-bare-metal.md
@@ -179,7 +179,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.6.4/getting-started-docker.md b/site2/website/versioned_docs/version-2.6.4/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.6.4/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.6.4/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.6.4/helm-overview.md b/site2/website/versioned_docs/version-2.6.4/helm-overview.md
index 679fb4f3cfb..a77499e81ae 100644
--- a/site2/website/versioned_docs/version-2.6.4/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.6.4/helm-overview.md
@@ -67,8 +67,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.6.4/reference-configuration.md b/site2/website/versioned_docs/version-2.6.4/reference-configuration.md
index 8e25aafe718..078807ba0f1 100644
--- a/site2/website/versioned_docs/version-2.6.4/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.6.4/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.6.4/security-overview.md b/site2/website/versioned_docs/version-2.6.4/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.6.4/security-overview.md
+++ b/site2/website/versioned_docs/version-2.6.4/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.6.4/security-tls-keystore.md b/site2/website/versioned_docs/version-2.6.4/security-tls-keystore.md
index 10a0c57f0c3..f85af6b91e1 100644
--- a/site2/website/versioned_docs/version-2.6.4/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.6.4/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.6.4/security-token-admin.md b/site2/website/versioned_docs/version-2.6.4/security-token-admin.md
index 16791938803..6bef23b1064 100644
--- a/site2/website/versioned_docs/version-2.6.4/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.6.4/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.6.4/standalone-docker.md b/site2/website/versioned_docs/version-2.6.4/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.6.4/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.6.4/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.7.0/admin-api-brokers.md
index 61c5ad33f06..751bc149832 100644
--- a/site2/website/versioned_docs/version-2.7.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.7.0/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.7.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.7.0/admin-api-clusters.md
index 338961dd993..3eb238506cc 100644
--- a/site2/website/versioned_docs/version-2.7.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.7.0/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.7.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.7.0/admin-api-namespaces.md
index 5bcc8c837e2..f21082c4156 100644
--- a/site2/website/versioned_docs/version-2.7.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.7.0/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.7.0/client-libraries-go.md b/site2/website/versioned_docs/version-2.7.0/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.7.0/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.7.0/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.7.0/client-libraries.md b/site2/website/versioned_docs/version-2.7.0/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.7.0/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.7.0/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.7.0/concepts-overview.md b/site2/website/versioned_docs/version-2.7.0/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.7.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.7.0/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.7.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.7.0/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.7.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.7.0/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal.md
index b24cc82b016..403f2fc6f79 100644
--- a/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.7.0/deploy-bare-metal.md
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.7.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.7.0/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.7.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.7.0/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.0/helm-overview.md b/site2/website/versioned_docs/version-2.7.0/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.7.0/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.7.0/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.7.0/reference-configuration.md b/site2/website/versioned_docs/version-2.7.0/reference-configuration.md
index 0e02d56c3cb..9a72fdb0853 100644
--- a/site2/website/versioned_docs/version-2.7.0/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.7.0/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.7.0/security-overview.md b/site2/website/versioned_docs/version-2.7.0/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.7.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.7.0/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.7.0/security-tls-keystore.md b/site2/website/versioned_docs/version-2.7.0/security-tls-keystore.md
index 5250888df8e..e7c18c025cc 100644
--- a/site2/website/versioned_docs/version-2.7.0/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.7.0/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.7.0/security-token-admin.md b/site2/website/versioned_docs/version-2.7.0/security-token-admin.md
index 16791938803..6bef23b1064 100644
--- a/site2/website/versioned_docs/version-2.7.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.7.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.7.0/standalone-docker.md b/site2/website/versioned_docs/version-2.7.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.7.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.7.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.7.1/admin-api-brokers.md
index 61c5ad33f06..751bc149832 100644
--- a/site2/website/versioned_docs/version-2.7.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.7.1/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.7.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.7.1/admin-api-clusters.md
index 338961dd993..3eb238506cc 100644
--- a/site2/website/versioned_docs/version-2.7.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.7.1/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.7.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.7.1/admin-api-namespaces.md
index b174c941314..d034f101fd1 100644
--- a/site2/website/versioned_docs/version-2.7.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.7.1/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.7.1/client-libraries-go.md b/site2/website/versioned_docs/version-2.7.1/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.7.1/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.7.1/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.7.1/client-libraries.md b/site2/website/versioned_docs/version-2.7.1/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.7.1/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.7.1/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.7.1/concepts-overview.md b/site2/website/versioned_docs/version-2.7.1/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.7.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.7.1/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.7.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.7.1/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.7.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.7.1/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal-multi-cluster.md
index c81f2ef858c..bdf8dfa251b 100644
--- a/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal.md
index b24cc82b016..403f2fc6f79 100644
--- a/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.7.1/deploy-bare-metal.md
@@ -181,7 +181,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.7.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.7.1/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.7.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.7.1/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.1/helm-overview.md b/site2/website/versioned_docs/version-2.7.1/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.7.1/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.7.1/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.7.1/reference-configuration.md b/site2/website/versioned_docs/version-2.7.1/reference-configuration.md
index b421be008e2..71b7208b901 100644
--- a/site2/website/versioned_docs/version-2.7.1/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.7.1/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.7.1/security-overview.md b/site2/website/versioned_docs/version-2.7.1/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.7.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.7.1/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.7.1/security-tls-keystore.md b/site2/website/versioned_docs/version-2.7.1/security-tls-keystore.md
index 0f02664e82b..062d903e0e2 100644
--- a/site2/website/versioned_docs/version-2.7.1/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.7.1/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.7.1/security-token-admin.md b/site2/website/versioned_docs/version-2.7.1/security-token-admin.md
index 310db340511..2173a6cb1d1 100644
--- a/site2/website/versioned_docs/version-2.7.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.7.1/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.7.1/standalone-docker.md b/site2/website/versioned_docs/version-2.7.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.7.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.7.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.7.2/admin-api-brokers.md
index 61c5ad33f06..751bc149832 100644
--- a/site2/website/versioned_docs/version-2.7.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.7.2/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.7.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.7.2/admin-api-clusters.md
index 4e28200ccfa..f3af1752955 100644
--- a/site2/website/versioned_docs/version-2.7.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.7.2/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.7.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.7.2/admin-api-namespaces.md
index c8edb82714c..eb843a8d7f9 100644
--- a/site2/website/versioned_docs/version-2.7.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.7.2/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.7.2/client-libraries-go.md b/site2/website/versioned_docs/version-2.7.2/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.7.2/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.7.2/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.7.2/client-libraries.md b/site2/website/versioned_docs/version-2.7.2/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.7.2/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.7.2/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.7.2/concepts-overview.md b/site2/website/versioned_docs/version-2.7.2/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.7.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.7.2/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.7.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.7.2/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.7.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.7.2/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal-multi-cluster.md
index 643c1224ce5..f8862b3f69e 100644
--- a/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal-multi-cluster.md
@@ -76,7 +76,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -85,7 +85,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal.md
index 4ab21f499dc..43f307d9446 100644
--- a/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.7.2/deploy-bare-metal.md
@@ -187,7 +187,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.7.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.7.2/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.7.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.7.2/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.2/helm-overview.md b/site2/website/versioned_docs/version-2.7.2/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.7.2/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.7.2/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.7.2/reference-configuration.md b/site2/website/versioned_docs/version-2.7.2/reference-configuration.md
index b421be008e2..71b7208b901 100644
--- a/site2/website/versioned_docs/version-2.7.2/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.7.2/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.7.2/security-overview.md b/site2/website/versioned_docs/version-2.7.2/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.7.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.7.2/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.7.2/security-tls-keystore.md b/site2/website/versioned_docs/version-2.7.2/security-tls-keystore.md
index 0f02664e82b..062d903e0e2 100644
--- a/site2/website/versioned_docs/version-2.7.2/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.7.2/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.7.2/security-token-admin.md b/site2/website/versioned_docs/version-2.7.2/security-token-admin.md
index 310db340511..2173a6cb1d1 100644
--- a/site2/website/versioned_docs/version-2.7.2/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.7.2/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.7.2/standalone-docker.md b/site2/website/versioned_docs/version-2.7.2/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.7.2/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.7.2/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.3/admin-api-brokers.md b/site2/website/versioned_docs/version-2.7.3/admin-api-brokers.md
index 61c5ad33f06..751bc149832 100644
--- a/site2/website/versioned_docs/version-2.7.3/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.7.3/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.7.3/admin-api-clusters.md b/site2/website/versioned_docs/version-2.7.3/admin-api-clusters.md
index 4e28200ccfa..f3af1752955 100644
--- a/site2/website/versioned_docs/version-2.7.3/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.7.3/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.7.3/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.7.3/admin-api-namespaces.md
index c8edb82714c..eb843a8d7f9 100644
--- a/site2/website/versioned_docs/version-2.7.3/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.7.3/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.7.3/client-libraries-go.md b/site2/website/versioned_docs/version-2.7.3/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.7.3/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.7.3/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.7.3/client-libraries.md b/site2/website/versioned_docs/version-2.7.3/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.7.3/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.7.3/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.7.3/concepts-overview.md b/site2/website/versioned_docs/version-2.7.3/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.7.3/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.7.3/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.7.3/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.7.3/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.7.3/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.7.3/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal-multi-cluster.md
index 8bce2cc2de3..4ee6da37f0a 100644
--- a/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal.md
index fa398f0e63a..7b1850b3b21 100644
--- a/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.7.3/deploy-bare-metal.md
@@ -179,7 +179,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.7.3/getting-started-docker.md b/site2/website/versioned_docs/version-2.7.3/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.7.3/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.7.3/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.3/helm-overview.md b/site2/website/versioned_docs/version-2.7.3/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.7.3/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.7.3/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.7.3/reference-configuration.md b/site2/website/versioned_docs/version-2.7.3/reference-configuration.md
index b421be008e2..71b7208b901 100644
--- a/site2/website/versioned_docs/version-2.7.3/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.7.3/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.7.3/security-overview.md b/site2/website/versioned_docs/version-2.7.3/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.7.3/security-overview.md
+++ b/site2/website/versioned_docs/version-2.7.3/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.7.3/security-tls-keystore.md b/site2/website/versioned_docs/version-2.7.3/security-tls-keystore.md
index 0f02664e82b..062d903e0e2 100644
--- a/site2/website/versioned_docs/version-2.7.3/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.7.3/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.7.3/security-token-admin.md b/site2/website/versioned_docs/version-2.7.3/security-token-admin.md
index 310db340511..2173a6cb1d1 100644
--- a/site2/website/versioned_docs/version-2.7.3/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.7.3/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.7.3/standalone-docker.md b/site2/website/versioned_docs/version-2.7.3/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.7.3/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.7.3/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.4/admin-api-brokers.md b/site2/website/versioned_docs/version-2.7.4/admin-api-brokers.md
index 61c5ad33f06..751bc149832 100644
--- a/site2/website/versioned_docs/version-2.7.4/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.7.4/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.7.4/admin-api-clusters.md b/site2/website/versioned_docs/version-2.7.4/admin-api-clusters.md
index 4e28200ccfa..f3af1752955 100644
--- a/site2/website/versioned_docs/version-2.7.4/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.7.4/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.7.4/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.7.4/admin-api-namespaces.md
index c8edb82714c..eb843a8d7f9 100644
--- a/site2/website/versioned_docs/version-2.7.4/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.7.4/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.7.4/client-libraries-go.md b/site2/website/versioned_docs/version-2.7.4/client-libraries-go.md
index df40107139a..0c7140a208f 100644
--- a/site2/website/versioned_docs/version-2.7.4/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.7.4/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.7.4/client-libraries.md b/site2/website/versioned_docs/version-2.7.4/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.7.4/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.7.4/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.7.4/concepts-overview.md b/site2/website/versioned_docs/version-2.7.4/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.7.4/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.7.4/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.7.4/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.7.4/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.7.4/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.7.4/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal-multi-cluster.md
index 8bce2cc2de3..4ee6da37f0a 100644
--- a/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal-multi-cluster.md
@@ -69,7 +69,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -78,7 +78,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal.md
index fa398f0e63a..7b1850b3b21 100644
--- a/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.7.4/deploy-bare-metal.md
@@ -179,7 +179,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.7.4/getting-started-docker.md b/site2/website/versioned_docs/version-2.7.4/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.7.4/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.7.4/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.7.4/helm-overview.md b/site2/website/versioned_docs/version-2.7.4/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.7.4/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.7.4/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.7.4/reference-configuration.md b/site2/website/versioned_docs/version-2.7.4/reference-configuration.md
index 5e5372d7122..1480ee275e1 100644
--- a/site2/website/versioned_docs/version-2.7.4/reference-configuration.md
+++ b/site2/website/versioned_docs/version-2.7.4/reference-configuration.md
@@ -8,7 +8,7 @@ original_id: reference-configuration
 
 
 
-Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone)
+Pulsar configuration can be managed via a series of configuration files contained in the [`conf`](https://github.com/apache/pulsar/tree/master/conf) directory of a Pulsar [installation](getting-started-standalone.md)
 
 - [BookKeeper](#bookkeeper)
 - [Broker](#broker)
diff --git a/site2/website/versioned_docs/version-2.7.4/security-overview.md b/site2/website/versioned_docs/version-2.7.4/security-overview.md
index 82a289fb67e..c7823104d14 100644
--- a/site2/website/versioned_docs/version-2.7.4/security-overview.md
+++ b/site2/website/versioned_docs/version-2.7.4/security-overview.md
@@ -27,9 +27,9 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.7.4/security-tls-keystore.md b/site2/website/versioned_docs/version-2.7.4/security-tls-keystore.md
index c9accb77852..3ea385bc189 100644
--- a/site2/website/versioned_docs/version-2.7.4/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.7.4/security-tls-keystore.md
@@ -230,7 +230,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.7.4/security-token-admin.md b/site2/website/versioned_docs/version-2.7.4/security-token-admin.md
index 310db340511..2173a6cb1d1 100644
--- a/site2/website/versioned_docs/version-2.7.4/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.7.4/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.7.4/standalone-docker.md b/site2/website/versioned_docs/version-2.7.4/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.7.4/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.7.4/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.8.0/admin-api-brokers.md
index fbbdc7879ed..d1f89f4290e 100644
--- a/site2/website/versioned_docs/version-2.8.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.8.0/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.8.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.8.0/admin-api-clusters.md
index 338961dd993..3eb238506cc 100644
--- a/site2/website/versioned_docs/version-2.8.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.8.0/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.8.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.8.0/admin-api-namespaces.md
index e5de4e1d0d9..a6903c7f1c7 100644
--- a/site2/website/versioned_docs/version-2.8.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.8.0/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.8.0/client-libraries-go.md b/site2/website/versioned_docs/version-2.8.0/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.8.0/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.8.0/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.8.0/client-libraries.md b/site2/website/versioned_docs/version-2.8.0/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.8.0/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.8.0/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.8.0/concepts-overview.md b/site2/website/versioned_docs/version-2.8.0/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.8.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.8.0/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.8.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.8.0/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.8.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.8.0/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal-multi-cluster.md
index b90c7e26614..dacd571365a 100644
--- a/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal-multi-cluster.md
@@ -76,7 +76,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -85,7 +85,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal.md
index 8effc857c1d..f856f9f8b1c 100644
--- a/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.8.0/deploy-bare-metal.md
@@ -187,7 +187,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.8.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.8.0/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.8.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.8.0/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.0/helm-overview.md b/site2/website/versioned_docs/version-2.8.0/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.8.0/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.8.0/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.8.0/security-overview.md b/site2/website/versioned_docs/version-2.8.0/security-overview.md
index 3cea9b848c6..f8e8eac98f8 100644
--- a/site2/website/versioned_docs/version-2.8.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.8.0/security-overview.md
@@ -27,10 +27,10 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
diff --git a/site2/website/versioned_docs/version-2.8.0/security-tls-keystore.md b/site2/website/versioned_docs/version-2.8.0/security-tls-keystore.md
index d85e4ec29a5..c4474c3c409 100644
--- a/site2/website/versioned_docs/version-2.8.0/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.8.0/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.8.0/security-token-admin.md b/site2/website/versioned_docs/version-2.8.0/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.8.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.8.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.8.0/standalone-docker.md b/site2/website/versioned_docs/version-2.8.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.8.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.8.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.8.1/admin-api-brokers.md
index fbbdc7879ed..d1f89f4290e 100644
--- a/site2/website/versioned_docs/version-2.8.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.8.1/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.8.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.8.1/admin-api-clusters.md
index 338961dd993..3eb238506cc 100644
--- a/site2/website/versioned_docs/version-2.8.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.8.1/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.8.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.8.1/admin-api-namespaces.md
index e5de4e1d0d9..a6903c7f1c7 100644
--- a/site2/website/versioned_docs/version-2.8.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.8.1/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.8.1/client-libraries-go.md b/site2/website/versioned_docs/version-2.8.1/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.8.1/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.8.1/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.8.1/client-libraries.md b/site2/website/versioned_docs/version-2.8.1/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.8.1/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.8.1/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.8.1/concepts-overview.md b/site2/website/versioned_docs/version-2.8.1/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.8.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.8.1/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.8.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.8.1/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.8.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.8.1/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal-multi-cluster.md
index b90c7e26614..dacd571365a 100644
--- a/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal-multi-cluster.md
@@ -76,7 +76,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -85,7 +85,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal.md
index 8effc857c1d..f856f9f8b1c 100644
--- a/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.8.1/deploy-bare-metal.md
@@ -187,7 +187,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.8.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.8.1/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.8.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.8.1/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.1/helm-overview.md b/site2/website/versioned_docs/version-2.8.1/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.8.1/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.8.1/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.8.1/security-overview.md b/site2/website/versioned_docs/version-2.8.1/security-overview.md
index 3cea9b848c6..f8e8eac98f8 100644
--- a/site2/website/versioned_docs/version-2.8.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.8.1/security-overview.md
@@ -27,10 +27,10 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
diff --git a/site2/website/versioned_docs/version-2.8.1/security-tls-keystore.md b/site2/website/versioned_docs/version-2.8.1/security-tls-keystore.md
index d85e4ec29a5..c4474c3c409 100644
--- a/site2/website/versioned_docs/version-2.8.1/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.8.1/security-tls-keystore.md
@@ -210,7 +210,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.8.1/security-token-admin.md b/site2/website/versioned_docs/version-2.8.1/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.8.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.8.1/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.8.1/standalone-docker.md b/site2/website/versioned_docs/version-2.8.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.8.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.8.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.8.2/admin-api-brokers.md
index a50c7c5778e..2651b708a1e 100644
--- a/site2/website/versioned_docs/version-2.8.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.8.2/admin-api-brokers.md
@@ -30,7 +30,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.8.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.8.2/admin-api-clusters.md
index b77f212954e..c4b404fc8e6 100644
--- a/site2/website/versioned_docs/version-2.8.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.8.2/admin-api-clusters.md
@@ -28,7 +28,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.8.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.8.2/admin-api-namespaces.md
index 931fa779740..c87b613b84d 100644
--- a/site2/website/versioned_docs/version-2.8.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.8.2/admin-api-namespaces.md
@@ -27,7 +27,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.8.2/client-libraries-go.md b/site2/website/versioned_docs/version-2.8.2/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.8.2/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.8.2/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.8.2/client-libraries.md b/site2/website/versioned_docs/version-2.8.2/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.8.2/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.8.2/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.8.2/concepts-overview.md b/site2/website/versioned_docs/version-2.8.2/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.8.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.8.2/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.8.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.8.2/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.8.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.8.2/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal-multi-cluster.md
index b90c7e26614..dacd571365a 100644
--- a/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal-multi-cluster.md
@@ -76,7 +76,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -85,7 +85,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal.md
index 3737b978ff3..a7cbd126869 100644
--- a/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.8.2/deploy-bare-metal.md
@@ -187,7 +187,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.8.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.8.2/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.8.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.8.2/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.2/helm-overview.md b/site2/website/versioned_docs/version-2.8.2/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.8.2/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.8.2/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.8.2/security-overview.md b/site2/website/versioned_docs/version-2.8.2/security-overview.md
index 3cea9b848c6..f8e8eac98f8 100644
--- a/site2/website/versioned_docs/version-2.8.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.8.2/security-overview.md
@@ -27,10 +27,10 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
diff --git a/site2/website/versioned_docs/version-2.8.2/security-tls-keystore.md b/site2/website/versioned_docs/version-2.8.2/security-tls-keystore.md
index 88b13f3db78..05b919cc159 100644
--- a/site2/website/versioned_docs/version-2.8.2/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.8.2/security-tls-keystore.md
@@ -230,7 +230,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.8.2/security-token-admin.md b/site2/website/versioned_docs/version-2.8.2/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.8.2/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.8.2/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.8.2/standalone-docker.md b/site2/website/versioned_docs/version-2.8.2/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.8.2/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.8.2/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.3/admin-api-brokers.md b/site2/website/versioned_docs/version-2.8.3/admin-api-brokers.md
index a50c7c5778e..2651b708a1e 100644
--- a/site2/website/versioned_docs/version-2.8.3/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.8.3/admin-api-brokers.md
@@ -30,7 +30,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java)
+* The `brokers` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.8.3/admin-api-clusters.md b/site2/website/versioned_docs/version-2.8.3/admin-api-clusters.md
index b77f212954e..c4b404fc8e6 100644
--- a/site2/website/versioned_docs/version-2.8.3/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.8.3/admin-api-clusters.md
@@ -28,7 +28,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `clusters` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.8.3/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.8.3/admin-api-namespaces.md
index 931fa779740..c87b613b84d 100644
--- a/site2/website/versioned_docs/version-2.8.3/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.8.3/admin-api-namespaces.md
@@ -27,7 +27,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the [`pulsar-admin`](reference-pulsar-admin) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java)
+* The `namespaces` method of the {@inject: javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.8.3/client-libraries-go.md b/site2/website/versioned_docs/version-2.8.3/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.8.3/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.8.3/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.8.3/client-libraries.md b/site2/website/versioned_docs/version-2.8.3/client-libraries.md
index 23e5a06a616..00d128c5140 100644
--- a/site2/website/versioned_docs/version-2.8.3/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.8.3/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.8.3/concepts-overview.md b/site2/website/versioned_docs/version-2.8.3/concepts-overview.md
index 7405960f609..e13e691bbda 100644
--- a/site2/website/versioned_docs/version-2.8.3/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.8.3/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.8.3/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.8.3/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.8.3/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.8.3/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal-multi-cluster.md
index b90c7e26614..dacd571365a 100644
--- a/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal-multi-cluster.md
@@ -76,7 +76,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -85,7 +85,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal.md
index 8effc857c1d..f856f9f8b1c 100644
--- a/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.8.3/deploy-bare-metal.md
@@ -187,7 +187,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.8.3/getting-started-docker.md b/site2/website/versioned_docs/version-2.8.3/getting-started-docker.md
index 0219b58f5c8..b9f12f0b526 100644
--- a/site2/website/versioned_docs/version-2.8.3/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.8.3/getting-started-docker.md
@@ -57,7 +57,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.8.3/helm-overview.md b/site2/website/versioned_docs/version-2.8.3/helm-overview.md
index 5cf890595bd..9cde85e2d18 100644
--- a/site2/website/versioned_docs/version-2.8.3/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.8.3/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow our [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.8.3/security-overview.md b/site2/website/versioned_docs/version-2.8.3/security-overview.md
index 3cea9b848c6..f8e8eac98f8 100644
--- a/site2/website/versioned_docs/version-2.8.3/security-overview.md
+++ b/site2/website/versioned_docs/version-2.8.3/security-overview.md
@@ -27,10 +27,10 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
diff --git a/site2/website/versioned_docs/version-2.8.3/security-tls-keystore.md b/site2/website/versioned_docs/version-2.8.3/security-tls-keystore.md
index 88b13f3db78..05b919cc159 100644
--- a/site2/website/versioned_docs/version-2.8.3/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.8.3/security-tls-keystore.md
@@ -230,7 +230,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.8.3/security-token-admin.md b/site2/website/versioned_docs/version-2.8.3/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.8.3/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.8.3/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.9.0/admin-api-brokers.md b/site2/website/versioned_docs/version-2.9.0/admin-api-brokers.md
index 97dc95da011..8bbe0e8f3cd 100644
--- a/site2/website/versioned_docs/version-2.9.0/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.9.0/admin-api-brokers.md
@@ -30,7 +30,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.9.0/admin-api-clusters.md b/site2/website/versioned_docs/version-2.9.0/admin-api-clusters.md
index 64bc4d9856e..b2f0fa3b256 100644
--- a/site2/website/versioned_docs/version-2.9.0/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.9.0/admin-api-clusters.md
@@ -28,7 +28,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.9.0/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.9.0/admin-api-namespaces.md
index 7d58bf7379f..3c37c112a7d 100644
--- a/site2/website/versioned_docs/version-2.9.0/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.9.0/admin-api-namespaces.md
@@ -27,7 +27,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.9.0/client-libraries-go.md b/site2/website/versioned_docs/version-2.9.0/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.9.0/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.9.0/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.9.0/client-libraries.md b/site2/website/versioned_docs/version-2.9.0/client-libraries.md
index 997f426cab4..607c9317e4b 100644
--- a/site2/website/versioned_docs/version-2.9.0/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.9.0/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.9.0/concepts-overview.md b/site2/website/versioned_docs/version-2.9.0/concepts-overview.md
index 9e6c857d0f3..971dcad671d 100644
--- a/site2/website/versioned_docs/version-2.9.0/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.9.0/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.9.0/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.9.0/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.9.0/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.9.0/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal-multi-cluster.md
index 4b059ae95db..df25604af4e 100644
--- a/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal.md
index 755c753f38b..ed0c9d7da46 100644
--- a/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.9.0/deploy-bare-metal.md
@@ -205,7 +205,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.9.0/getting-started-docker.md b/site2/website/versioned_docs/version-2.9.0/getting-started-docker.md
index 26fe54abe74..71f1bb9734f 100644
--- a/site2/website/versioned_docs/version-2.9.0/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.9.0/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.9.0/helm-overview.md b/site2/website/versioned_docs/version-2.9.0/helm-overview.md
index e4b77f71c66..fc4cbfe426a 100644
--- a/site2/website/versioned_docs/version-2.9.0/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.9.0/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.9.0/security-overview.md b/site2/website/versioned_docs/version-2.9.0/security-overview.md
index 3cea9b848c6..f8e8eac98f8 100644
--- a/site2/website/versioned_docs/version-2.9.0/security-overview.md
+++ b/site2/website/versioned_docs/version-2.9.0/security-overview.md
@@ -27,10 +27,10 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
diff --git a/site2/website/versioned_docs/version-2.9.0/security-tls-keystore.md b/site2/website/versioned_docs/version-2.9.0/security-tls-keystore.md
index f2728c1a3c4..6cc3a2c6083 100644
--- a/site2/website/versioned_docs/version-2.9.0/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.9.0/security-tls-keystore.md
@@ -230,7 +230,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.9.0/security-token-admin.md b/site2/website/versioned_docs/version-2.9.0/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.9.0/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.9.0/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.9.0/standalone-docker.md b/site2/website/versioned_docs/version-2.9.0/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.9.0/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.9.0/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.9.1/admin-api-brokers.md b/site2/website/versioned_docs/version-2.9.1/admin-api-brokers.md
index 97dc95da011..8bbe0e8f3cd 100644
--- a/site2/website/versioned_docs/version-2.9.1/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.9.1/admin-api-brokers.md
@@ -30,7 +30,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.9.1/admin-api-clusters.md b/site2/website/versioned_docs/version-2.9.1/admin-api-clusters.md
index 64bc4d9856e..b2f0fa3b256 100644
--- a/site2/website/versioned_docs/version-2.9.1/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.9.1/admin-api-clusters.md
@@ -28,7 +28,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.9.1/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.9.1/admin-api-namespaces.md
index 7d58bf7379f..3c37c112a7d 100644
--- a/site2/website/versioned_docs/version-2.9.1/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.9.1/admin-api-namespaces.md
@@ -27,7 +27,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.9.1/client-libraries-go.md b/site2/website/versioned_docs/version-2.9.1/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.9.1/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.9.1/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.9.1/client-libraries.md b/site2/website/versioned_docs/version-2.9.1/client-libraries.md
index 997f426cab4..607c9317e4b 100644
--- a/site2/website/versioned_docs/version-2.9.1/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.9.1/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.9.1/concepts-overview.md b/site2/website/versioned_docs/version-2.9.1/concepts-overview.md
index 9e6c857d0f3..971dcad671d 100644
--- a/site2/website/versioned_docs/version-2.9.1/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.9.1/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.9.1/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.9.1/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.9.1/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.9.1/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal-multi-cluster.md
index 4b059ae95db..df25604af4e 100644
--- a/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal.md
index 755c753f38b..ed0c9d7da46 100644
--- a/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.9.1/deploy-bare-metal.md
@@ -205,7 +205,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.9.1/getting-started-docker.md b/site2/website/versioned_docs/version-2.9.1/getting-started-docker.md
index 26fe54abe74..71f1bb9734f 100644
--- a/site2/website/versioned_docs/version-2.9.1/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.9.1/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.9.1/helm-overview.md b/site2/website/versioned_docs/version-2.9.1/helm-overview.md
index e4b77f71c66..fc4cbfe426a 100644
--- a/site2/website/versioned_docs/version-2.9.1/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.9.1/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.9.1/security-overview.md b/site2/website/versioned_docs/version-2.9.1/security-overview.md
index 3cea9b848c6..f8e8eac98f8 100644
--- a/site2/website/versioned_docs/version-2.9.1/security-overview.md
+++ b/site2/website/versioned_docs/version-2.9.1/security-overview.md
@@ -27,10 +27,10 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
diff --git a/site2/website/versioned_docs/version-2.9.1/security-tls-keystore.md b/site2/website/versioned_docs/version-2.9.1/security-tls-keystore.md
index f2728c1a3c4..6cc3a2c6083 100644
--- a/site2/website/versioned_docs/version-2.9.1/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.9.1/security-tls-keystore.md
@@ -230,7 +230,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.9.1/security-token-admin.md b/site2/website/versioned_docs/version-2.9.1/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.9.1/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.9.1/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys
 
diff --git a/site2/website/versioned_docs/version-2.9.1/standalone-docker.md b/site2/website/versioned_docs/version-2.9.1/standalone-docker.md
index d02efd23a06..6ff3696bd3a 100644
--- a/site2/website/versioned_docs/version-2.9.1/standalone-docker.md
+++ b/site2/website/versioned_docs/version-2.9.1/standalone-docker.md
@@ -53,7 +53,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.9.2/admin-api-brokers.md b/site2/website/versioned_docs/version-2.9.2/admin-api-brokers.md
index 97dc95da011..8bbe0e8f3cd 100644
--- a/site2/website/versioned_docs/version-2.9.2/admin-api-brokers.md
+++ b/site2/website/versioned_docs/version-2.9.2/admin-api-brokers.md
@@ -30,7 +30,7 @@ Pulsar brokers consist of two components:
 
 * The `brokers` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `brokers` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be [dynamically configured](#dynamic-broker-configuration).
 
diff --git a/site2/website/versioned_docs/version-2.9.2/admin-api-clusters.md b/site2/website/versioned_docs/version-2.9.2/admin-api-clusters.md
index 64bc4d9856e..b2f0fa3b256 100644
--- a/site2/website/versioned_docs/version-2.9.2/admin-api-clusters.md
+++ b/site2/website/versioned_docs/version-2.9.2/admin-api-clusters.md
@@ -28,7 +28,7 @@ Clusters can be managed via:
 
 * The `clusters` command of the [`pulsar-admin`]([reference-pulsar-admin.md](https://pulsar.apache.org/tools/pulsar-admin/)) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `clusters` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/site2/website/versioned_docs/version-2.9.2/admin-api-namespaces.md b/site2/website/versioned_docs/version-2.9.2/admin-api-namespaces.md
index 7d58bf7379f..3c37c112a7d 100644
--- a/site2/website/versioned_docs/version-2.9.2/admin-api-namespaces.md
+++ b/site2/website/versioned_docs/version-2.9.2/admin-api-namespaces.md
@@ -27,7 +27,7 @@ Namespaces can be managed via:
 
 * The `namespaces` command of the [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java)
+* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/site2/website/versioned_docs/version-2.9.2/client-libraries-go.md b/site2/website/versioned_docs/version-2.9.2/client-libraries-go.md
index 51633cf1e23..48c42d1efa3 100644
--- a/site2/website/versioned_docs/version-2.9.2/client-libraries-go.md
+++ b/site2/website/versioned_docs/version-2.9.2/client-libraries-go.md
@@ -5,7 +5,7 @@ sidebar_label: "Go"
 original_id: client-libraries-go
 ---
 
-> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo)
+> Tips: Currently, the CGo client will be deprecated, if you want to know more about the CGo client, please refer to [CGo client docs](client-libraries-cgo.md)
 
 You can use Pulsar [Go client](https://github.com/apache/pulsar-client-go) to create Pulsar [producers](#producers), [consumers](#consumers), and [readers](#readers) in Go (aka Golang).
 
diff --git a/site2/website/versioned_docs/version-2.9.2/client-libraries.md b/site2/website/versioned_docs/version-2.9.2/client-libraries.md
index 997f426cab4..607c9317e4b 100644
--- a/site2/website/versioned_docs/version-2.9.2/client-libraries.md
+++ b/site2/website/versioned_docs/version-2.9.2/client-libraries.md
@@ -7,13 +7,13 @@ original_id: client-libraries
 
 Pulsar supports the following client libraries:
 
-- [Java client](client-libraries-java)
-- [Go client](client-libraries-go)
-- [Python client](client-libraries-python)
-- [C++ client](client-libraries-cpp)
-- [Node.js client](client-libraries-node)
-- [WebSocket client](client-libraries-websocket)
-- [C# client](client-libraries-dotnet)
+- [Java client](client-libraries-java.md)
+- [Go client](client-libraries-go.md)
+- [Python client](client-libraries-python.md)
+- [C++ client](client-libraries-cpp.md)
+- [Node.js client](client-libraries-node.md)
+- [WebSocket client](client-libraries-websocket.md)
+- [C# client](client-libraries-dotnet.md)
 
 ## Feature matrix
 Pulsar client feature matrix for different languages is listed on [Client Features Matrix](https://github.com/apache/pulsar/wiki/Client-Features-Matrix) page.
diff --git a/site2/website/versioned_docs/version-2.9.2/concepts-overview.md b/site2/website/versioned_docs/version-2.9.2/concepts-overview.md
index 9e6c857d0f3..971dcad671d 100644
--- a/site2/website/versioned_docs/version-2.9.2/concepts-overview.md
+++ b/site2/website/versioned_docs/version-2.9.2/concepts-overview.md
@@ -21,11 +21,11 @@ Key features of Pulsar are listed below:
 
 ## Contents
 
-- [Messaging Concepts](concepts-messaging)
-- [Architecture Overview](concepts-architecture-overview)
-- [Pulsar Clients](concepts-clients)
-- [Geo Replication](concepts-replication)
-- [Multi Tenancy](concepts-multi-tenancy)
-- [Authentication and Authorization](concepts-authentication)
-- [Topic Compaction](concepts-topic-compaction)
-- [Tiered Storage](concepts-tiered-storage)
+- [Messaging Concepts](concepts-messaging.md)
+- [Architecture Overview](concepts-architecture-overview.md)
+- [Pulsar Clients](concepts-clients.md)
+- [Geo Replication](concepts-replication.md)
+- [Multi Tenancy](concepts-multi-tenancy.md)
+- [Authentication and Authorization](concepts-authentication.md)
+- [Topic Compaction](concepts-topic-compaction.md)
+- [Tiered Storage](concepts-tiered-storage.md)
diff --git a/site2/website/versioned_docs/version-2.9.2/concepts-topic-compaction.md b/site2/website/versioned_docs/version-2.9.2/concepts-topic-compaction.md
index c85e703495a..e402c965384 100644
--- a/site2/website/versioned_docs/version-2.9.2/concepts-topic-compaction.md
+++ b/site2/website/versioned_docs/version-2.9.2/concepts-topic-compaction.md
@@ -15,7 +15,7 @@ Pulsar's topic compaction feature:
 
 * Allows for faster "rewind" through topic logs
 * Applies only to [persistent topics](concepts-architecture-overview.md#persistent-storage)
-* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction)
+* Triggered automatically when the backlog reaches a certain size or can be triggered manually via the command line. See the [Topic compaction cookbook](cookbooks-compaction.md)
 * Is conceptually and operationally distinct from [retention and expiry](concepts-messaging.md#message-retention-and-expiry). Topic compaction *does*, however, respect retention. If retention has removed a message from the message backlog of a topic, the message will also not be readable from the compacted topic ledger.
 
 > #### Topic compaction example: the stock ticker
diff --git a/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal-multi-cluster.md b/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal-multi-cluster.md
index a31bfb9e3f2..1af30a644ab 100644
--- a/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal-multi-cluster.md
+++ b/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal-multi-cluster.md
@@ -67,7 +67,7 @@ Directory | Contains
 :---------|:--------
 `bin` | [Command-line tools](reference-cli-tools) of Pulsar, such as [`pulsar`](reference-cli-tools.md#pulsar) and [`pulsar-admin`](https://pulsar.apache.org/tools/pulsar-admin/)
 `conf` | Configuration files for Pulsar, including for [broker configuration](reference-configuration.md#broker), [ZooKeeper configuration](reference-configuration.md#zookeeper), and more
-`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview)
+`examples` | A Java JAR file containing example [Pulsar Functions](functions-overview.md)
 `lib` | The [JAR](https://en.wikipedia.org/wiki/JAR_(file_format)) files that Pulsar uses 
 `licenses` | License files, in `.txt` form, for various components of the Pulsar codebase
 
@@ -76,7 +76,7 @@ The following directories are created once you begin running Pulsar:
 Directory | Contains
 :---------|:--------
 `data` | The data storage directory that ZooKeeper and BookKeeper use
-`instances` | Artifacts created for [Pulsar Functions](functions-overview)
+`instances` | Artifacts created for [Pulsar Functions](functions-overview.md)
 `logs` | Logs that the installation creates
 
 
diff --git a/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal.md b/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal.md
index f689723494c..6761a7c8fb1 100644
--- a/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal.md
+++ b/site2/website/versioned_docs/version-2.9.2/deploy-bare-metal.md
@@ -205,7 +205,7 @@ tiered-storage-jcloud-@pulsar:version@.nar
 
 ```
 
-For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage)
+For more details of how to configure tiered storage feature, you can refer to the [Tiered storage cookbook](cookbooks-tiered-storage.md)
 
 
 ## Deploy a ZooKeeper cluster
diff --git a/site2/website/versioned_docs/version-2.9.2/getting-started-docker.md b/site2/website/versioned_docs/version-2.9.2/getting-started-docker.md
index 26fe54abe74..71f1bb9734f 100644
--- a/site2/website/versioned_docs/version-2.9.2/getting-started-docker.md
+++ b/site2/website/versioned_docs/version-2.9.2/getting-started-docker.md
@@ -50,7 +50,7 @@ use one of these root URLs to interact with your cluster:
 * `pulsar://localhost:6650`
 * `http://localhost:8080`
 
-The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python)
+The following example will guide you get started with Pulsar quickly by using the [Python client API](client-libraries-python.md)
 client API.
 
 Install the Pulsar Python client library directly from [PyPI](https://pypi.org/project/pulsar-client/):
diff --git a/site2/website/versioned_docs/version-2.9.2/helm-overview.md b/site2/website/versioned_docs/version-2.9.2/helm-overview.md
index e4b77f71c66..fc4cbfe426a 100644
--- a/site2/website/versioned_docs/version-2.9.2/helm-overview.md
+++ b/site2/website/versioned_docs/version-2.9.2/helm-overview.md
@@ -66,8 +66,8 @@ The Apache Pulsar Helm chart contains all required dependencies.
 
 If you deploy a PoC for testing, we strongly suggest you follow this [Quick Start Guide](getting-started-helm) for your first iteration.
 
-1. [Preparation](helm-prepare)
-2. [Deployment](helm-deploy)
+1. [Preparation](helm-prepare.md)
+2. [Deployment](helm-deploy.md)
 
 ## Upgrading
 
diff --git a/site2/website/versioned_docs/version-2.9.2/security-overview.md b/site2/website/versioned_docs/version-2.9.2/security-overview.md
index af1327314a8..23d4477214c 100644
--- a/site2/website/versioned_docs/version-2.9.2/security-overview.md
+++ b/site2/website/versioned_docs/version-2.9.2/security-overview.md
@@ -27,11 +27,11 @@ Apache Pulsar uses a [Authentication Provider](#authentication-providers) to est
 
 Currently Pulsar supports the following authentication providers:
 
-- [TLS Authentication](security-tls-authentication)
-- [Athenz](security-athenz)
-- [Kerberos](security-kerberos)
-- [JSON Web Token Authentication](security-jwt)
-- [OAuth 2.0 authentication](security-oauth2)
-- [HTTP basic authentication](security-basic-auth)
+- [TLS Authentication](security-tls-authentication.md)
+- [Athenz](security-athenz.md)
+- [Kerberos](security-kerberos.md)
+- [JSON Web Token Authentication](security-jwt.md)
+- [OAuth 2.0 authentication](security-oauth2.md)
+- [HTTP basic authentication](security-basic-auth.md)
 
 
diff --git a/site2/website/versioned_docs/version-2.9.2/security-tls-keystore.md b/site2/website/versioned_docs/version-2.9.2/security-tls-keystore.md
index f2728c1a3c4..6cc3a2c6083 100644
--- a/site2/website/versioned_docs/version-2.9.2/security-tls-keystore.md
+++ b/site2/website/versioned_docs/version-2.9.2/security-tls-keystore.md
@@ -230,7 +230,7 @@ e.g.
 
 ## TLS authentication with KeyStore configure
 
-This similar to [TLS authentication with PEM type](security-tls-authentication)
+This similar to [TLS authentication with PEM type](security-tls-authentication.md)
 
 ### broker authentication config
 
diff --git a/site2/website/versioned_docs/version-2.9.2/security-token-admin.md b/site2/website/versioned_docs/version-2.9.2/security-token-admin.md
index 6736097f43b..1a438dc7923 100644
--- a/site2/website/versioned_docs/version-2.9.2/security-token-admin.md
+++ b/site2/website/versioned_docs/version-2.9.2/security-token-admin.md
@@ -29,7 +29,7 @@ will need one.
 > #### Always use TLS transport encryption
 > Sending a token is equivalent to sending a password over the wire. It is strongly recommended to
 > always use TLS encryption when talking to the Pulsar service. See
-> [Transport Encryption using TLS](security-tls-transport)
+> [Transport Encryption using TLS](security-tls-transport.md)
 
 ## Secret vs Public/Private keys