diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs
index 973036a40982c..afd5eb42d019d 100644
--- a/src/librustdoc/html/format.rs
+++ b/src/librustdoc/html/format.rs
@@ -575,7 +575,7 @@ fn generate_macro_def_id_path(
ExternalLocation::Local => {
// `root_path` always end with a `/`.
format!(
- "{root_path}{crate_name}/{path}",
+ "{root_path}{path}",
root_path = root_path.unwrap_or(""),
path = path.iter().map(|p| p.as_str()).join("/")
)
diff --git a/tests/rustdoc/auxiliary/jump-to-def-macro.rs b/tests/rustdoc/auxiliary/jump-to-def-macro.rs
new file mode 100644
index 0000000000000..f442b9461e892
--- /dev/null
+++ b/tests/rustdoc/auxiliary/jump-to-def-macro.rs
@@ -0,0 +1,6 @@
+#[macro_export]
+macro_rules! symbols {
+ ($name:ident = $value:expr) => {
+ pub const $name: isize = $value;
+ }
+}
diff --git a/tests/rustdoc/jump-to-def-macro.rs b/tests/rustdoc/jump-to-def-macro.rs
new file mode 100644
index 0000000000000..e8e97a442dd10
--- /dev/null
+++ b/tests/rustdoc/jump-to-def-macro.rs
@@ -0,0 +1,15 @@
+//@ aux-build:jump-to-def-macro.rs
+//@ build-aux-docs
+//@ compile-flags: -Zunstable-options --generate-link-to-definition
+
+#![crate_name = "foo"]
+
+// @has 'src/foo/jump-to-def-macro.rs.html'
+
+#[macro_use]
+extern crate jump_to_def_macro;
+
+// @has - '//a[@href="../../jump_to_def_macro/macro.symbols.html"]' 'symbols!'
+symbols! {
+ A = 12
+}