Я бы Handlebars например взял. В подобной ситуации он мне помог.
Шаблон + данные + немного js чтобы в шаблон эти данные отрендерить.
Т.е. идея в том чтобы использовать шаблонизатор на клиенте. Но помните, что в данном случае пострадает индексация.
Можно пойти дальше и подключить knockout.js, или более серьезные вещи как Angular, React, но должны быть ещё какие-то веские причины для их использования.
В контактной форме скрытое поле input[type=hidden].
У кнопки data-атрибут, в котором указан источник ("название кнопки").
При открытии модального окна ( dimsemenov.com/plugins/magnific-popup ) значение data-атрибута записывается в скрытый input.
Так же для яндекс.метрики можно разные цели расставить по кнопкам и дергать их, если требуется точная аналитика эффективности кнопок.
Лучшего способа нет. Всё зависит от проекта, его задач, аудитории. Ресурсов, которыми располагает проект.
Не путайте отдельную "лайт-версию" сайта для мобильных (m.example.com) и просто адаптивный сайт.
Так же есть более сложные варианты, использующие как адаптивность основного шаблона, так и рендеринг разных шаблонов в зависимости от устройства.
Почитайте вот эту стать. например: frontender.info/building-a-better-responsive-website
И убедитесь что в Tools -> Compatibilily View Settings не стоит галочка "Display Intranet sites in Compatibility View"
Ну и неплохо бы скриншот консоли, какие-то оибки ведь он выводит.
Если пользователь сначала читает текст поста, затем комментарии, затем похожие посты, то логично будет загрузить эти 3 блока отдельными запросами в таком же порядке. Можно, например, грузить комментарии только когда пользователь приблизился к ним, т.е. в зависимости от прокрутки страницы.
А на стороне сервера прирутить кеширование:
1. Запросов к БД (memcached например)
2. Запросов к API, там где не критично каждый раз получать самые новые данные. Например используете видео с Vimeo, а также его данные о кличестве просмотров. Чем дергать каждый раз эти данные закешируйте их на час.
Пока что пришёл к подключению миксинов только там где они нужны и использованию кэширования.
В большом проекте все равно тухленько, подозреваю что ещё сам сборщик есть куда оптимизировать. Пока некогда углубляться докинул оперативки до 16, стало пободрее
Соответствующий плагин под Gulp / Grunt и немного заморочиться с конфигами.
Мой сборщик смотрит на папку sprites. Каждая папка внутри неё - отдельный спрайт, название папки - название спрайта и префикс для его переменной в scss.
Речь разумеется о сборке спрайтов из отдельных картинок.