We should separate indicating that browser accepted user actions, sent a request and is waiting for an answer from the solution.
If the server answers very quickly, it would be very annoying for users to see an empty page after each click.
In many cases a click does not lead to a new page but modifies a small part of it. This is one of the reasons why AJAX and later single page applications (Ember, Angular, React, ...) appeared. User gets better experience when he doesn't see an empty page but sees a smooth changes.
Indication might be good in some cases, but not always. For instance, would you like to see some animation, when you just scroll the page, especially upwards, when you know the the content is already loaded? When page rendered immediately, you may find such blinking unneeded or even irritating.
An indication about request being executed may be helpful only if the indicate some long running action, e.g. if it will take 3-5 seconds. But one of the more complicated parts here is to determine what action will take much time. This can depend on the logic behind the request (suppose you trigger a complicated report that takes 10 seconds) or just loading a plain HTML which takes 0.1 seconds. Some users can have very slow connection and even loading of plain HTML that takes 0.1 seconds for one user can take 10 seconds for another user. Browser cannot know in advance what request will take how long. That is why it is mainly up to developers to add some indicators or not. There is no universal simple solution.