Placing <link>
s in the <head>
Putting <link>
s in the head is part of the specification. Besides that, placing at the top allows the page to render progressively which improves the user experience. The problem with putting stylesheets near the bottom of the document is that it prohibits progressive rendering in many browsers, including Internet Explorer. Some browsers block rendering to avoid having to repaint elements of the page if their styles change. The user is stuck viewing a blank white page. It prevents the flash of unstyled contents.
Placing <script>
s just before </body>
<script>
s block HTML parsing while they are being downloaded and executed. Downloading the scripts at the bottom will allow the HTML to be parsed and displayed to the user first.
An exception for positioning of <script>
s at the bottom is when your script contains document.write()
, but these days it’s not a good practice to use document.write()
. Also, placing <script>
s at the bottom means that the browser cannot start downloading the scripts until the entire document is parsed. One possible workaround is to put <script>
in the <head>
and use the defer
attribute.