1. Атрибут
lang нужно указывать в элементах с текстовой информацией. Если вся страница содержит контент на одном языке, нужно указывать в
html. Указать в
head, и не указать в
body — по меньшей мере странно.
2. Ситуация, когда сервер не отдаёт кодировку в
Content-Type, невероятно редка. Однако, если она-таки случится, а документ не содержит сигнатуру (например, выбран режим сохранения
UTF-8 without BOM), то указание кодировки следует первым же тэгом
meta в
head, дабы браузер не парсил вторично текст, содержащий не
ASCII символы.
Подробнее про
encoding sniffing
3. Указание кодировки лучше указывать так (тип документа внутри документа не имеет никакого смысла):
<meta charset="utf-8">
4. Сначала стили, потом скрипты. Тут вы поступаете абсолютно верно. Если скрипту можно указать асинхронную загрузку — указывайте. Если же это невозможно, рекомендуется загружать синхронно в
head только те скрипты, которые могут требоваться для других скриптов, а остальные ставить в конец
body.
5. Если есть стили, которые не требуются для стартового отображения страницы (например, только для подгружаемого контента), можно динамически загружать их (например, по окончании формирования
DOM) с помощью скриптов. Как вариант — с помощью скриптов, стоящих в конце
body, не ориентируясь на событие
DOMContentLoaded.
Советы по оптимизации от
Google Developers
6. Остальные
meta и
link тэги можно разделить на используемые для формирования страницы (например,
meta name="viewport"), которые лучше ставить в начало
head после кодировки, и второстепенные, которые можно ставить в конце
head, что вы и сделали.
7. Заголовок документа можно поставить после всех первостепенных
meta тэгов.
8. По умолчанию
meta name="robots" имеет значение
all (
index,follow). Если вы не намерены запрещать что-то, писать его смысла нет.