diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 93929a67d496..8839d4fc4e52 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -306,6 +306,14 @@ function defocusSearchBar() {
function expandSection(id) {
var elem = document.getElementById(id);
if (elem && isHidden(elem)) {
+ if (elem.tagName === "CODE" && elem.parentNode.tagName === "H4") {
+ // We are in a trait implementation, what we want is the parent.
+ elem = elem.parentNode;
+ if (elem.id !== null && elem.id.length > 0) {
+ // Change the id to the parent which is "more clear" and better for users.
+ window.location.hash = elem.id;
+ }
+ }
var h3 = elem.parentNode.previousElementSibling;
if (h3 && h3.tagName !== "H3") {
h3 = h3.previousElementSibling; // skip div.docblock