Одним из наиважнейших параметров внутренней оптимизации является время отклика. Оно складывается из множества важных факторов.
Время обработки запроса сервером.
Время, за которое веб-сервер обработает пришедший ему запрос, и начнёт отдачу ответа.
Зависит от нескольких параметров: производительность сервера, используемое серверное ПО, характер, объём и особенности отдаваемого контента.
Производительность сервера — это ключевой элемент быстро работающей системы. Если сервер сам по себе маломощный, то остаётся либо обновить железо/тарифный план/сменить хостинг-провайдера, либо смириться с тем, что он будет тормозить от любой нагрузки и страниц тяжелее helloworld’а. И наоборот, даже откровенно криво настроенный сервер с непомерно раздутым контентом может быстро работать до поры до времени, если он оснащён новейшим высокопроизводительным железом (хотя это и не повод отказываться от оптимизации ПО и контента, но мощное железо часто в условиях слабо- и, иногда, средненагруженных проектов способно скрыть эти проблемы).
Конфигурация ПО. Вторым по важности параметром для быстродействия сервера является конфигурация ПО. По возможности, сервер должен располагаться на отдельной машине, реальной или виртуальной, и на нём должно быть установлено и запущено только необходимое для его работы ПО,
установка же целого вороха программ «на всякий случай» недопустима. Во многих версиях серверных ОС даже отсутствует по умолчанию графическая оболочка, как излишняя для его функционирования. Так же важно уделить внимание оптимизации ПО в контексте размещённого на сайте контента и активности пользователей. Так, например, если у сайта высокая посещаемость и обилие нединамического контента, то есть смысл настроить nginx, который работает со статическим контентом гораздо быстрее apache’а.
Отдаваемый контент. Тут, при желании, можно развернуть целый курс лекций, но можно выделить и несколько простых советов. Поменьше включений в страницы, поменьше размером (если вы вставите фоном в сайт FullHD видео, то ваш сайт будет тормозить вне зависимости от вашего железа и конфигурации ПО), и код динамических страниц пооптимальней и попроще. Правила написания качественного и быстрого кода динамических веб-страниц выходят за рамки данной статьи, и сильно зависят от конкретного инструментария (PHP, ASP.NET, Java-сервлеты, и т. д.), поэтому ограничимся несколькими универсальными советами — поменьше обращений к диску, БД и вообще операций ввода — вывода, лучше одно большое обращение за раз, чем десять мелких, если есть возможность перенести обработку данных на СУБД — её нужно перенести на СУБД.
Скорость Интернет-соединения.
Второй по важности составляющей является скорость интернет-соединения. В условиях географической близости сервера и клиента всё просто: нужна скорость — оплати скорость у (хостинг)провайдера. Ну и, само собой, в случае собственного физического сервера, следует убедиться, что используется современное и качественное сетевое оборудование, так как гигабитная выделенная линия ничем не поможет, в случае, если трафик идёт через допотопный роутер, который в принципе не способен обрабатывать такой трафик. В условиях, когда сервер и клиент физически отдалены, поговорим в следующем пункте.
Физическое и логическое расстояние между сервером и клиентом.
Скорость света — величина, пусть и весьма значительная, но конечная, и при передаче данных на другой конец Земли будут задержки, близкие к заградительным для попадания в поисковую выдачу даже в самых идеальных условиях — из-за физических законов. Но это в нереально-идеальных условиях. На практике же на каждые 100-150 метров Ethernet кабеля должен стоять повторитель, каждый из которых будет есть от 4-6 мс и выше, плюс ветвь Ethernet сети не может быть больше 2.5км из-за ограничений протокола, между отрезками сети должно быть устройство, преобразующее пакеты (свитч, роутер и т. д.), которое даёт ещё большую задержку. У оптоволокна ситуация получше — 10+мс повторитель каждые 60-100км, но на больших расстояниях и они накапливают задержку, достаточную чтобы вызвать недовольство пользователей и понижение выдачи в поисковых системах. Поэтому важно, чтобы сервер физически находился близко к клиентам (или, по крайней мере, к дата-центру поисковика, приоритетного для продвижения), иначе задержки на линии могут стать недопустимыми даже в случае идеально сконфигурированного сервера на сверхмощном железе топ-класса, отдающего лишь статический контент. В случае же, когда вам требуется покрыть большую географическую зону, будет иметь смысл настройка нескольких серверов, каждый из которых будет обслуживать свой географический регион.
Правильная внутренняя перелинковка.
Вы никогда не задумывались, откуда поисковик узнаёт о том, что у вас на сайте появились новые страницы? Ответ: из ссылок. Поисковик время от времени переиндексирует страницы, о которых ему известно. Одним из этапов переиндексации является извлечение из страниц ссылок, и добавление тех из них, которые отсутствуют в индексе поисковика, в этот самый индекс. То есть, чтобы ваша страница была когда-нибудь проиндексирована, требуется, чтобы на неё вела ссылка с раннее проиндексированной страницы, иначе о ней никто никогда не узнает. Из этого следует первое правило внутренней перелинковки: на каждую страницу, подлежащую индексированию, обязательно должна вести как минимум одна ссылка со страницы, подлежащей индексированию.
Несмотря на довольно высокую очевидность, у этого пункта есть свои подводные камни. Например, что можно считать отдельными страницами. Многие страницы бывают представлены адресами типа index.php?action=catalog&category=phone&manufactured=LG&page=3&goods_count=20#main_section. Согласитесь, что даже человеку составит сложность разобраться, что за что отвечает, и определить, что, например, вышеприведённая страница и страница вида index.php?action=catalog&category=phone&manufactured=LG&page=5&goods_count=10 — это в принципе, одна и та же страница, только с урезанным до десяти наименований списком товаров, а страница index.php?action=catalog&category=phone&manufactured=Xiaomi&page=3&goods_count=20 – уже совсем другая страница. Конечно, поисковики выработали механизмы, помогающие понимать, когда динамическая веб-страница — это именно динамическая веб-страница, просто принимающая некоторые параметры (например, страница комментариев), а когда — точка входа для многих отдельных страниц (типа read.php?page=2). Но эти механизмы несовершенны, и сами поисковики рекомендуют на них не полагаться, а с помощью mod rewrite’а или иного инструмента назначать таким страницам человеко-понятный URL (ЧПУ), поощряя такие страницы более высокими результатами в поиске.
Так же существует проблема неявного определения ссылок. Многие сайты предлагают своим посетителям задать определённые параметры с помощью формы, чтобы отфильтровать контент и выдать им только ту информацию, которая будет им интересно. Но то, что для того, чтобы получить, к примеру, список телефонов в продаже, нужно из выпадающего списка «категории» выбрать «телефоны и смартфоны» и нажать «найти», понятно живому человеку. А поисковым системам, несмотря на все старания их авторов, никто ещё полноценные мозги не приделал. Из-за чего далеко не факт, что поисковик, увидев форму с выбором категорий товаров, сможет понять, что это аналог ссылок (наиболее вероятно, что он вообще проигнорирует форму, в лучшем случае просто перейдёт по action’у, отбросив параметры). Одним из вариантов решения данной проблемы является создание для каждой категории списка относящихся к ним страниц, и дублирование ссылками на них фильтров формы поиска. Как результат, поисковик, несмотря на то, что не сможет нормально обработать форму с фильтрами, сможет увидеть обычные ссылки, и, перейдя по ним, получить список доступных страниц следующего уровня, и сможет проиндексировать их.
Это не единственная важная особенность перелинковки. Многие поисковики (в число которых по многим признакам входит Яндекс) вместо того, чтобы вразнобой обходить страницы, добавляют в список на индексирования главную страницу сайта, и затем обходят сразу весь сайт. Кроме изменения порядка обхода, это влечёт за собой и несколько других особенностей. Во-первых, если на страницу вела ссылка из вне сайта, но по каким-либо причинам отсутствуют ссылки изнутри (например, страница, с которой вела внутренняя ссылка, была добавлена в robots.txt, и, как следствие, её ссылки оказались неиндексированными), то такая страница могла выпасть из поискового индекса. Во-вторых, следующие такому подходу поисковики могут оценивать страницы по такому критерию, как глубина вложенности, то есть чем больше требуется переходов с главной страницы, чтобы достичь текущую, тем больше будет её глубина. Многие поисковики понижают результаты страниц с высокой глубиной, подразумевая то, что информация, которую её автор считал важной, не будет размещена где-то в глубинах сайта, а наоборот, будет вытолкнута как можно выше.
Динамически подгружаемый контент.
Данный пункт весьма близок по смыслу к предыдущему (перелинковке), но имеет и свои особенности. Если секции сайта, путь к которым лежит через страницы с формами, могут оказаться отсечены от индекса из-за того, что поисковики не могут воспользоваться формами, то страницы, на которых контент формируется на стороне клиента с помощью Javascript, Adobe Flash, Silverlight и иных способов, могут вылететь из поиска из-за недостаточно эффективной работы поисковиков с динамически формируемым контентом. Несмотря на то, что поисковые системы прилагают значительные усилия для того, чтобы научиться понимать формируемый скриптами контент, далеко не всегда возможно с первого взгляда вообще отличить скрипт, формирующий контент, от какого-нибудь бесполезного скрипта вроде скрипта ведения статистики, который раз в определённое отправляет на сервер запрос, не говоря уже о том, чтобы эффективно автоматизировать анализ кода и чёткое определение того, исполнение каких участков кода нужно непременно дождаться перед индексированием страницы.
Поэтому настоятельно не рекомендуется злоупотреблять AJAX’ом и иными подобными технологиями при формировании подлежащего индексации контента (т. е. , к примеру, подгружать скриптом карту проезда можно, а вот строку с адресом фирмы лучше сформировать и добавить на страницу на стороне сервера).
Медиа-контент.
Иногда может показаться, что вместо того, чтобы возиться с HTML и CSS для предоставления информации в наилучшем со стороны дизайнера виде, проще просто вставить сформированную в Adobe Photoshop’е картинку, или вместо того, чтобы напечатать целую «простыню» текста — записать и разместить на странице одно единственное видео. Но у подобного подхода есть один огромный минус — подобный контент очень плохо (а ещё недавно — совсем никак) обрабатывается поисковыми системами. Поэтому, если вы хотите, чтобы размещённая информация была проиндексирована — либо формируйте её изначально в текстовом виде, либо снабжайте медиа-контент мета-данными (например, картинке с дизайнерски отрисованным слоганом можно в параметр alt прописать этот самый слоган).
Отсутствие плагиата и повторяющегося текста.
Как привлечь пользователей на сайт? Этот вопрос актуален с тех пор, как Интернет перестал быть сетью для обмена данных военными. С тех пор было дано множество ответов: сделать сайт быстрым, красивым, сделать его одинаково работающим во всех браузерах, купить рекламу и т. д. Но один ответ остаётся неизменным во все времена: разместить на сайте что-либо, что будет интересно пользователю. Если на сайте отсутствует что-либо, что действительно интересно пользователю, то он просто закроет ваш сайт, а актуальный контент сам по себе позволяет привлечь пользователей, которые будут находить сайт в поисковиках по своим запросам, и делиться ссылками на него. Как же создать/найти интересный и актуальный контент? Это ещё более интересный и обширный вопрос, на который в принципе не существует простых ответов. Кроме одного: взять интересный контент у кого-то другого. Купить. Или украсть и выдать за свой. И, к сожалению многие выбрали именно этот простой путь. Как результат, в Интернете стали появляться тысячи сайтов, на которых в принципе не было какого-то своего контента — лишь скопированный откуда-то ещё. Ведь зачем напрягаться, придумывать что-то своё, когда можно просто нажать Ctrl+C – Ctrl+V. Разумеется, это не могло не сказаться на качестве поисковой выдачи. Десятки почти одинаковых страниц, отличающиеся в лучшем случае парой слов, заменённых на синонимы, и многие страницы поисковой выдачи, которые нужно было просмотреть для того, чтобы найти что-то новое прилагаются. Долго терпеть такое пользователи поисковиков, и, как следствие, поисковики были не в силах. И, как ответ, появились плагиат-фильтры. Они группировали страницы по повторяющемуся контенту, после чего выбирали одну из них, которая должна была отображаться, а остальным резали рейтинг, отправляя их в самый хвост выдачи, или вовсе удаляли из выдачи/индекса. Обычно той страницей, которая попадала в выдачу, являлась самая первая страница, которая разместила данный материал. Такие меры позволили нормализовать ситуацию, и исправить засилье копипастеров. Конечно, они полностью не исчезли, и со временем научились обманывать плагиат-фильтры, изменяя текст достаточно, чтобы плагиат-фильтры переставали считать один текст копией другого, но этот процесс плохо поддаётся автоматизации, и, как следствие, перепечатка чужого текста превратилась из банальной рутины в достаточно сложный и творческий процесс, что существенно замедлило темпы и привело к тому, что во многих случаях стало проще написать свой текст по той же теме, чем пытаться переделать чужой.
Чем грозит попадание под плагиат-фильтры, и как его избежать?
В зависимости от поисковиков попадание под плагиат-фильтры может привести к существенному понижению в поисковой выдачи (вплоть до полного исключения) части или всего сайта. Так, например, Яндекс, обнаружив плагиат, понижает весь сайт в выдаче (в среднем на 20 — 30 позиций для сайтов, претендующих на попадания на первые страницы выдачи). Как избежать попаданий под плагиат-фильтр? Прежде всего, конечно же, не использовать на сайте текстовые материалы, взятые с чужих сайтов. Если по каким-либо причинам требуется разместить чужой контент (например, перепечатка научной статьи), то разумным поступком будет исключить данный материал из поискового индекса (добавить страницу с чужим контентом в robots.txt, обрамить чужой текст на странице в теги