HTML Child / The Elements That Carry Meaning
Navigating and acting are two different promises
A link takes you somewhere. A control does something. Confusing them confuses everyone.
This is the most useful distinction a beginner can learn, and it is genuinely simple. If activating the thing takes the reader to another place, whether that is another page or another position on the same page, it is a link. If activating the thing performs an action where the reader already is, such as opening a panel, adding an item, submitting what has been typed or dismissing a message, it is a control. Everything else follows from that one question: am I going somewhere, or am I doing something? Ask it before you decide what the element is, not afterwards.
The reason it matters is that each type comes with a set of promises attached, and readers depend on those promises without ever thinking about them. A link can be opened in a new window, saved for later, copied and shared, and it is announced as a destination. A control cannot be shared, because there is nothing to share, and it is announced as an action. Both can be reached and activated by keyboard alone, in ways people have learnt and expect. Get the type right and all of that arrives automatically. Get it wrong and you have to rebuild it badly by hand.
The visible symptom of getting it wrong is familiar to everyone. A link that acts like a control leaves people with a saved address that does nothing when they return to it. A control dressed as a link cannot be shared but invites the attempt. Worst of all is the piece of ordinary text made clickable, which announces itself as nothing, cannot be reached without a mouse, and gives no indication that it can be activated at all. It looks fine to the person who built it, because they know it is there. Nobody else does.