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

[pulsar] branch master updated: fix: docs 404 due to path missing .md (#16190)

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

liuyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 07901f0450a fix: docs 404 due to path missing .md (#16190)
07901f0450a is described below

commit 07901f0450a2586888fafc326771b713c2b2a2ad
Author: Li Li <ur...@apache.org>
AuthorDate: Thu Jun 23 13:19:18 2022 +0800

    fix: docs 404 due to path missing .md (#16190)
---
 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