75 моментов, которые ты обязан учесть перед запуском сайта
Нельзя просто так взять и выложить сайт в мир! Даже модные CMS не спасут. Не печалься, мы выделили для тебя ключевые особенности запуска нового ресурса.
Внешний вид и пользователи
- Помни, что браузеры работают по-разному, и соответственно, показывать инфу они тоже будут по-своему. Проверь, как себя ведет сайт в существующих браузерах/движках: Firefox/Gecko, Safari/WebKit, Chrome, IE, Opera и (если это возможно) в некоторых мобильных браузерах. Было бы круто проверить, как сайт отображается на разных ОС.
- Учитывай тот факт, что люди могут юзать сайт на мобилках, читалках и прочих странных девайсах. Существуют стандарты доступности интернет-приложений для людей с ограниченными возможностями, которые тоже надо бы применять. Почитай мануал по WAI и прими к сведению.
- Развертывание обновлений незаметно для пользователей. Будет здорово, если у тебя появится возможность тестить продукт на промежуточном хостинге с выходом в сеть (не на локальной машине в трех виртуалках) и т. д. Это позволит проверить "подгружаемость" модулей, реализацию изменений в архитектуре и коде, и прочие важные штуки, способные испугать юзера на старте. Наиболее эффективное сочетание системы контроля версий (git, Subversion и др.) и механизма автосборки (Ant, NAnt и др.).
- Поотключай все костыли, созданные для дебага. Эти инструменты выводят служебные недружелюбные сообщения, о существовании которых юзеру знать необязательно.
- Если есть какие-либо формы, защити их капчей.
- Изучи теорию прогрессивного усовершенствования.
- Все данные юзера/для юзера (почта, телефон) нужно скрывать – спамеры и краулеры не дремлют.
- Используй с умом атрибут "nofollow". Почитай о нем отдельно.
- На сайте не должно быть таких страниц, которые бы при старте обновлялись несколько раз или долго подгружали содержимое.
- Перенаправляй всех после POST-a, если он был успешным, чтобы не допустить дублирующей отправки чего-либо на сервер (это может быть как дублирующая запись в базу, так и крутая инъекция, от которой потом бед не оберешься).
- Возьми на карандаш эту замечательную книгу по юзабилити.
Безопасность
- Изучи гайд по OWASP, охватывающий все тонкости безопасности сайта.
- Узнай все об инъекциях (особенно SQL) и о том, как их не пропустить.
- Все поля ввода должны быть защищены горой проверок, валидаций и других механизмов. Не верь никому!
- Используй "прочные" алгоритмы хеширования паролей для их надежного хранения.
- Не изобретай велосипед, пытаясь выдумать свою систему аутентификации. Все уже придумано! А если ты упустишь что-то незначительное или не учтешь – тебе на это укажет хакер с требованием некой суммы.
- Если на сайте используется платежная система – хорошенько изучи этот вопрос.
- На любых сайтах, где вводится конфиденциальная инфа (учетные данные, личная информация, данные кредитной карты), юзай
SSL/TLS/HTTPS
. Let's Encrypt – вот тебе бесплатный центр сертификации, который может помочь. - Предотврати возможность угона сессии.
- Избегай межсайтового скриптинга (
XSS
). - Остерегайся подделок межсайтовых запросов (
CSRF
). - Обезопась ресурс от
Clickjacking
. - Поддерживай систему всегда в обновленном состоянии.
- Не храни файлик с данными для подключения к БД "на виду".
- Регулярно читай о свежих случаях взломов и методах борьбы с ними – только так ты сможешь быть готовым ко всему.
- Прочти хендбук по безопасности от Google и хендбук хакера.
- Допиши
rel= "noopener noreferrer"
ко всем ссылкам сtarget="_blank"
, чтобы предотвратить JavaScript-перенаправление с главной страницы на поддельную. - Рассмотри возможность использования Content Security Policy.
Производительность
- Обязательно реализуй кэширование. Только реализуй правильно, ибо можно настроить так, что пользователь не увидит обновления в течение трех суток.
- Если контент долго подгружается (более 2-3 секунд), приделай прелоадер.
- Оптимизируй все картинки. Гуглы советуют использовать качественные и релевантные изображения без текста.
- Для проверки общего состояния ресурса юзай крутой инструмент (снова от Google). Существует еще несколько вариантов – от Yahoo и набор тулз YSlow для контроля других параметров перформанса.
- Используй сжатие содержимого brotli, gzip/deflate.
- Стремись к объединению нескольких CSS-таблиц или нескольких JS-файлов, чтобы уменьшить количество соединений и улучшить производительность gzip.
- Применяй svg, где это возможно. Почитай рекомендации для веб-девелоперов, чтобы лучше разбираться в теме.
- Если ресурс высоконагруженный, используй принцип параллельной загрузки – раздели статическое и динамическое содержимое между доменами.
- Статический контент (изображения, CSS, JavaScript и контент, который не нуждается в доступе к кукам) должен отправляться в отдельный домен, не использующий файлы cookie. Это все для того, чтобы при каждом обращении к домену и поддомену гора куков не нагружала соединение. Юзай CDN.
- Максимально сократи общее количество HTTP-запросов, которые требуются для отображения страницы.
- Почитай, что такое таск-раннеры и для чего они нужны. Выбери любой: Gulp, Grunt, Brocolli или Brunch и прикрути обязательно к сайту.
- Внимательно отнесись к такому "маловажному" моменту, как фавикон. Он должен быть в корне сайта, т. е.
/favicon.ico
. Браузеры автоматически запросят его, даже если значок вообще не упоминается в коде. Если у тебя его нет – пришло время его добавить.
Самое главное правило для этого пункта – делай сайты для людей, а не для поисковиков. С каждым годом сеошные алгоритмы меняются, но концепция остается неизменной.
- Используй "человекопонятные" URL. Ссылок вида:
https://proglib.io/rr6r7f734Xf3w444
быть не должно. - Позаботься о том, чтобы основные теги (
title
,description
и т. д.) были заполнены корректной инфой. - Можно поиграться с Open Graph метками.
- Можно заморочиться и прикрутить crawl для динамического контента. Это позволит поисковым роботам лучше, а главное, быстрее индексировать странички.
- Возьми за правило – ссылки вида: "тык", "сюда", "Click here" не принесут пользу твоему SEO. Ссылка должна нести смысл. Человек и бот должны понимать, куда ведет анкор.
- Отыщи все несуществующие страницы и удали весь мусор. Ссылки из мира, ведущие к тебе на сайт, на несуществующую страницу, должны возвращать красивую заглушку 404, а не "Страница не найдена".
- Странный файлик
sitemap.xml
должен быть в корне, и не верь тому, кто говорит иначе! - Изучи, что это такое
<link rel="canonical" ... />
, и применяй. - Для успешного мониторинга SEO, получения всякой аналитики и не только используй Google Webmaster Tools и Bing Webmaster Tools.
- Еще один полезный инструментарий – Google Analytics. И нет, он не только для рекламы, как все думают! Есть сторонний софт для этих же целей.
- Почитай, как
robots.txt
помогает поисковым паукам работать лучше. - Всегда используй
301 Moved Permanently
, например, после измененияwww.example.com
наexample.com
(или наоборот).
Как это сделано?
- Такие вещи, как HTTP, GET, POST, сессии, куки должны "отлетать от зубов".
- Пиши XHTML/HTML и CSS в соответствии со спецификациями W3C и убедись, что они проходят валидацию. Это необходимо, чтобы сделать работу с нетрадиционными браузерами, читалками и т. д. проще и эффективнее.
- JavaScript, и как он обрабатывается браузером.
- Разберись, как подгружается JavaScript, таблицы стилей и другие ресурсы, используемые на странице во время ее загрузки, и как они влияют на производительность. Перемести все скрипты в нижнюю часть страницы.
- Если собираешься использовать iframes, разберись, как работает JavaScript sandbox.
- Помни, что NoScript становится все более популярным, а с ним мобильные девайсы могут работать не так, как ожидалось. Когда-нибудь Google проиндексирует сайт, и часть JS перестанет запускаться.
- Разберись в разнице между редиректами 301 и 302.
- Рассмотри возможность использования нормализации CSS.
- Существуют фреймворки такие, как jQuery, MooTools, Prototype, Dojo и YUI 3, которые сглаживают большинство различий между браузерами при манипуляции DOM.
- Проверь админку на предмет залития файлов и работоспособности навигации.
- Поменяй дефолтные логин/пароль на что-то свое!
- Для оптимизации производительности различных фреймворков используй Google Libraries API, чтобы предотвратить бесполезную дублирующую подгрузку.
- Когда появляется какая-либо задача, не кидайся в сочинительство. Есть крупный шанс, что все уже давно придумано, осталось только найти.
Поиск и исправление ошибок
- Ты будешь тратить 20% своего времени на кодинг и 80% на его поддержание, поэтому создавай код соответственно.
- Если сайт крутится на WP, то для включения/выключения дебага константа WP_DEBUG должна быть
true/false
соответственно. Если движок другой, то пропиши в.htaccess
для директивphp_flag display_errors, php_flag display_startup_errors, php_flag html_errors
значениеon
илиoff
. - Установи хорошее решение для создания отчетов об ошибках.
- Прикрути к сайту систему, благодаря которой пользователи смогут сообщать о возможных проблемах.
- Хорошо документируй код и функционал продукта, чтобы в будущем тебе (и, возможно, другим коллегам) было проще выполнять техническое обслуживание.
- Регулярно делай резервные копии и убедись, что резервирование работает, чтобы потом не было мучительно больно.
- Обязательно юзай систему контроля версий: Subversion, Mercurial или Git.
- Перед запуском не забудь провести тестирование. Selenium тебе в помощь. Если же ты хочешь автоматизировать этот процесс, то смотри в сторону CI инструментов, например, Jenkins.
- Логирование никто не отменял. В этом тебе могут помочь log4j, log4net или log4r.
- Записывай в журнал все события и все обработанные/необработанные исключения. Анализ таких данных поможет выявить ключевые проблемы.