Я слышал, что их нужно писать в footer и с async-ом.
Чет дичь какую-то ты слышал. В большинстве случаев их нужно писать перед
</body>
, так как они работают с dom деревом, необходимо, чтобы это дерево прогрузилось перед взаимодействием со скриптом. Почти тот же эффект будет если записать в head или любое другое место страницы, с атрибутом defer, но при этом скрипт ждет не только прогрузки всей страницы, ну и пока он сам весь не прогрузится, а только потом запуститься. async очень редко используется.