What is difficult about the chain rule is the function concept, more specifically the composition of functions. Notation that hides or leaves implicit the composition of functions causes a great deal of confusion for students. However, the fundamental issues are not the notation used (all choices are messy to some extent), but what the use of the notation leaves implicit or to be inferred, and the extent to which these expectations are unrealizable by beginning students.
One thing potentially confusing (and I think not just for students) about the Leibniz notation is that in $\tfrac{dy}{dx} = \tfrac{dy}{du}\tfrac{du}{dx}$ it is not clear that $\tfrac{dy}{du}$ and $\tfrac{du}{dx}$ are both viewed as functions of $x$, and that, in the case of $\tfrac{dy}{du}$, this moreover means that this notation really indicates the composition $\tfrac{dy}{du}(u(x))$. That is, the Leibniz notation, at least as commonly used, hides the composition of functions. The notation $\tfrac{dy}{du}$ appears to indicate a function of $u$, and it is implicit from context that this function of $u$ is viewed as a function of $x$. Too much is left implicit, to be inferred from context.
One part of a solution is to make explicit all functional compositions. With the Leibniz notation this can become quite messy, particularly if higher derivatives are involved. For example, $\tfrac{d}{dx}(y \circ u) = (\tfrac{dy}{du}\circ u )\tfrac{du}{dx}$ indicates more clearly the functional compositions that occur, although it still does not indicate the dependence on $x$. Explicitly adding this notation becomes somewhat ugly - $\tfrac{d}{dx}(y \circ u)(x) = (\tfrac{dy}{du}\circ u )(x)\tfrac{du}{dx}(x)$ - but perhaps this is nonetheless preferable to begin. (Once students understand what they are doing, the explicit indication of the functional compositions becomes a bother, and it becomes clarifying to omit it, but at first I think the situation is reversed.) (I am not saying I like any of these notations - on the contrary I generally avoid the Leibniz notation - Also, a cleaner, functorial notation would be something like $D(u^{\ast}y) = u^{\ast}(Dy)D(u)$, where the pullback is defined by $u^{\ast}y = y \circ u$, but such a presentation of the chain rule as a cocyle identity is simply not viable for most students as usually educated.)
One could write alternatively $(y \circ u)^{\prime}(x) = (y^{\prime}\circ u)(x)u^{\prime}(x)$, and this is in many senses easier to read. What can be confusing for the student is that operationally the prime requires taking the derivative with respect to different variables ($x$ in one instance, $u$ in the other). Formally this is not a problem as variable names are really just placeholders that indicate the sequencing of compositions (the derivative is the derivative, whatever one chooses to call the argument), but it can be the essence of the difficulties that students have.
On the other hand, it is also one thing that can be problematic with the Leibniz notation - the Leibniz notation attaches too much significance to variable names. The derivative of $u$ is not the derivative with respect to $x$, it is the derivative of $u$ with respect to its argument, whatever name one gives to that argument. Fixation on variable names and their magical qualities is a quite natural, one might say primitive, human tendency, but it is also part of what needs to be overcome to understand properly the chain rule. Precisely one of the confusing aspects of $\tfrac{dy}{dx} = \tfrac{dy}{du}\tfrac{du}{dx}$ is that, since its right-hand side must be a function of $x$ for the equality to have sense, the expression $\tfrac{dy}{du}$, which the notation apparently indicates is a function of $u$, has to be considered as a function of $u(x)$, that is with $u$ viewed as a function of $x$, and this aspect is hidden notationally, so has to be inferred. For those with experience, the notational higiene compensates for leaving something implicit, but for students it can be a source of serious confusion.
I think the best tack is to make all of this as explicit as possible (obviously, in a language more accessible to students than that which I am using here), in particular indicating clearly what the difficulties are, where they occur, what is left implicit and what is not, whatever notation one choose to use. Operational rules of thumb that refer to inside and outside function will not help if they are not accompanied by precise explanation that makes clear what they intend to summarize and elide, although of course they can help when students are first sufficiently prepared to properly interpret them (however, in my experience this sort of informal summary works only with the most engaged students).
Diagrams can help. I am not sure how to make decent diagrams in mathjax, so I won't try here, but what I have in mind is a directed graph with three vertices and three arrows. The vertices represent the domains/codomains and the arrows represent the functions. The diagram can be labeled with the variable and function names. What it helps makes clear is that $y^{\prime}$ and $y$ have the same domain (it is the codomain of $u$, while $(y \circ u)^{\prime}$, must have the same domain as $y \circ u$. Accompanying computations by such diagrams, and repeating this a fair number of times can help.
A fundamental example, useful for other reasons, that should be clarifying in the context of the chain rule, is to take the derivative of the sine function viewed as a function of degrees. A student who can do this correctly, and write correctly to what it corresponds in whatever abstract functional notation (Leibniz or otherwise) has understood the chain rule.
Finally, a reflection. Many of the difficulties students have in calculus reduce to a failure to understand the abstract function concept. This concept is difficult and it is quite modern (In some sense it postdates calculus by one or two centuries). Its difficulty becomes apparent in any context requiring change of variables (chain rule, change of domain in integrals). Much of the problem is that it is often treated as something simple, requiring little explanation, or given explanation that is not precise. Better to treat the difficult topics directly and plainly than to look for ways to avoid them.
y=f(x)=x^2
andz=g(y)=1/y
. Easy to see thatg(f(x))=g(y=x^2)=1/y=1/(x^2)
. Once that's solid, then you can show how the Chain Rule gives the right result. $\endgroup$