4 August, 2008, Киев — Студия «Аналитик»™ | 2904
Интернет
Версия для печати | Отправить @mail | Метки
Только самые ленивые сторонники «собственного бизнеса» еще не попробовали свои силы в интернет коммерции. Среди моих знакомых почти каждому в той или иной форме приходила эта «идея» создания собственного интернет-магазина, подогретая мечтой о свободном графике и своем бизнесе. Инициатива обычно начинается со слов «откроем интернет-магазин как у Н-ского, посадим девочку...» (это ж сколько девочек нужно пересадить?).
Только самые ленивые сторонники «собственного бизнеса» еще не попробовали свои силы в интернет коммерции. Среди моих знакомых почти каждому в той или иной форме приходила эта «идея» создания собственного интернет-магазина, подогретая мечтой о свободном графике и своем бизнесе. Инициатива обычно начинается со слов «откроем интернет-магазин как у Н-ского, посадим девочку…» (это ж сколько девочек нужно пересадить?).
Казалось бы, в Украине уже создано достаточно интернет-магазинов, чтобы обеспечить заодно и часть потребителей дружественного Китая. На самом деле большинство интернет-магазинов — мертвый хлам, создание иллюзии интернет-магазина, который явно не выполняет своих первоначальных функций. Опознать эти интернет-магазины можно довольно быстро и сравнительно недорого, буквально с первого заказа:
Владельцы интернет-магазинов часто остаются разочарованы. Их надежды на свободный график и «свой бизнес» рухнули. А в эту же самую скорбную минуту интернет-магазин конкурента чувствует себя довольно-таки неплохо и признаков смерти подавать, почему-то, не спешит. Создание интернет-магазина с большой вероятностью окупится, а интернет-магазин станет постоянным бизнесом при условии, что он будет сделан по-человечески, и им действительно будут заниматься.
Наверное, к основным проблемам создания интернет-магазина отнес бы такие: актуальность ассортимента, логистика заказа, логистика товара, юзабилити и техническое обеспечение интернет-магазина.
Для меня было искренним удивлением узнать, что страницу поиска в интернет-магазине посещают совсем немногим реже, чем главную. Поиск «точно по фразе» во всех интернет-магазинах давно пора было бы отправить на свалку. Набирая фразу «синий сапог» было бы странным не увидеть среди результатов товары с названием «синие сапоги». Поиск, который не учитывает особенностей языка, годится разве что для поиска по артикулу. Кто-то знает напамять артикулы товаров, кроме самого владельца интернет-магазина? Во-первых, нужно отделять корни слов и создавать словарь корней слов. Потом по каждой странице или товару составляем индекс — набор записей в таблице с кодом слова из словаря и весом этого слова на странице (в зависимости от того, где слово встречается и как часто). При таком подходе, мы получим перечень подходящих страниц, уже отсортированных по релевантности всего за один SQL запрос. Причем — это очень быстрый запрос, т. к. ищем совпадения четко по коду слова. Это, гонечно не Гугл, но весьма недалеко по качеству поиска. Встретился лишь один недостаток такого подхода — инертность. Практически невозможно мгновенно переиндексировать весь контент сайта, если он меняется весь сразу — будет некоторое отставание результатов поиска от реального контента. На практике — это редко становится проблемой, да и весь контент одновременно меняется не часто. Если нас интересует создание интернет-магазина, оптимизированного под поисковые системы, — лучше сразу забыть о передаче параметров вроде идентификатора товара или раздела в качестве GET параметров URL пути. Путь к товару или разделу магазина не должен содержать весь этот хлам. Вот удобоваримый путь к пылесосу Karcher с артикулом 1251: http://www.myshop.ua/Product/Karcher/1251 или ко всем пылесосам Karcher: http://www.myshop.ua/Wacuumcleaners/Karcher. Ключевые слова из URL имеют наибольший приоритет для поисковой системы среди всего контента страницы. Поэтому, если нас интересует продвижение товара по названию его модели или бренду, — следует включать эти название и бренд в URL. Например, http://www.myshop.ua/Product/Karcher/Karcher-SE-3001/1251. Для разделения слов вместо подчеркивания следует использовать дефис, иначе поисковый робот не сможет разделить фразу на отдельные слова. В любом случае, каждый товар должен иметь свою личную страницу и личный URL путь, иначе шансы на продвижение будут невелики. Понятно, что важные слова, такие как модель товара и бренд, выносим в title-тег и дублируем в заголовках h1 или h2. Не лишним будет включить эти слова в description страницы. На релевантность, конечно, это не повлияет, но зато повысит кликабельность вашего линка в поисковый системах. При создании интернет-магазина реализуем карту сайта sitemap.xml согласно стандарту http://www.sitemaps.org/ru, иначе поисковый робот может долго «тупить» над интернет-магазином с ассортиментом в 3000 товаров (это как минимум 3000 страниц). Всевозможные корзины и личные кабинеты не забываем исключить из индекса, у нас для этого есть robots.txt. Поисковый робот непременно обрадуется, если при создании интернет-магазина мы учтем правильный ответ сервера со статусом 304. Оказывается, что информацией иногда довольно посещаемых интернет-магазинов все еще управляют в маленьких таких окошках с очень громким названием WYSIWYG, где с горем пополам можно установить ссылку в тексте. Название WYSIWYG здесь явное преувеличение, максимум, на что они годятся, — делать жирным или наклонным текст. На самом деле — это обычные HTML формы. Убежден, что для управления информационным наполнением интернет-магазина удобнее всего использовать визуальные системы управления, настоящие WYSIWYG, а HTML формы годятся для данных, являющихся, скорее, настройками. Интернет-магазин предполагает очень интенсивную работу с контентом, поэтому лишние действия вроде перегрузки страниц для сохранения данных, открытия полнотекстового редактора, предварительного просмотра страниц сильно осложняют жизнь простого труженика — пользователя CMS системы. Иногда это даже приводит к излишнему раздуванию штата редакторов интернет-магазина. Владельцы магазина уверены, что причина в том, что очень много работы с контентом. Ее действительно много, но выполняется она неоправданно медленно. Визуальное управление в моем понимании — это когда редактор интернет-магазина зашел на нужную страницу сайта, прямо на ней изменил (без всяких там кнопок «редактировать») информационное наполнение, и самой волшебной комбинацией Ctrl+S (или кнопкою «Сохранить», в крайнем случае) все свое творчество взял и сохранил. И все! Визуальное управление предполагает преимущественно использование родной навигации интернет-магазина. Кстати, тогда при наполнении уже первых двадцати страниц по гримасам редактора интернет-магазина можно будет судить о качестве проектирования навигации магазина. Визуальное редактирование выглядит примерно вот так.
Рис. 6. Визуальное редактирование страницы интернет-магазина. FarbaSite CMS. Вполне натуральна ситуация, когда создание информационного наполнения интернет-магазина поручают нескольким редакторам. Например, один редактор удаленный, занимается созданием и размещением контента для раздела «Новости», а другой штатный, занимается всеми остальными разделами интернет-магазина. На практике, очень сложно разобраться, кто и что наполнял, кто чего и зачем «испортил». Доступ и полномочия этих редакторов нужно разделять. Считаю, что развитая система управления правами — важная часть для тех интернет-магазинов, где предполагается больше одного редактора. Июль 2008. Богдан Олександрук, директор студии «Аналітикä» www.analytic.com.uaСоздание «правильного» поиска для интернет-магазина
Создание быстрого поиска, который учитывал бы морфологию языка. Как?
Пару замечаний по поисковой оптимизации интернет-магазина еще при создании
Управление контентом интернет-магазина
Визуальное управление контентом интернет-магазина
Несколько редакторов контента интернет-магазина и права доступа
То, что нормальному интернет-магазину без кеширования никак нельзя, — это факт. Иногда даже при 1 000–2 000 посетителей в день некоторые интернет-магазины испытывают трудности в пиковые часы нагрузки, особенно, если на хостинг-сервере размещен еще не один десяток сайтов. Дело в том, что в интернет-магазинах посетители намного более активно пользуются навигацией для перебора ассортимента. Кроме того, большую нагрузку создает поиск по ассортименту интернет-магазина. Вдобавок ко всему, часто используется программное изменение размеров изображений, что не по-детски нагружает веб-сервер интернет-магазина.
Кешируем страницы, обычные изображения, уменьшенные изображения, css, js. Кеширование изображений, css, js настраиваем в .htaccess. При программном уменьшении изображений товаров сразу же сохраняем их на сервере. Вот удачный пример создания пути к уменьшенному изображению http://www.mysite/Images/M/McQueen/3038.jpg.gdi/mW201/mH187. Следующие обращения к таким изображениям не будут задействовать скрипты сервера, а будут отдаваться напрямую сервером Apache, включая корректную обработку Etag-ов и 304 ответов. При таких путях удобно управлять кешированием уменьшенных изображений — все закешированные варианты размеров одного изображения можно удалять как одну директорию при изменении изображения.
Теперь относительно создания системы кеширования страниц интернет-магазина. Стандартный подход, когда скрипт сохраняет закешированную страницу, а потом читает ее из файла и отдает клиенту, не шибко-то удачен. Ведь в любом случае мы задействуем скрипт, что снижает производительность. Давайте GET параметры маскировать в URL пути, а страницы кешировать по-настоящему. Например, бренд Morgan товара для женщин можно передать вот так http://www.mysite/woman/query/brand/Morgan. После сохранения этой страницы пусть .htaccess напрямую указывает серверу Apache отдавать страницу без запуска php скрипта. В результате получим феноменальную производительность по-настоящему статических страниц со всеми преимуществами 304-х ответов.
Как же быть с состоянием корзины и сессиями? А никак. Сумму и количество товаров в корзине храним в cookies и выводим уже на клиенте при помощи JavaScript. Сессии вообще не создаем до первого добавления товара в корзину. Для навигации по ассортименту сессии нам вообще не нужны, в том числе и после добавления товара в корзину. В крайнем случае, чрезмерно динамический или персонализированный контент выводим на странице при помощи AJAX.
Иногда есть смысл в создании кеша результатов поиска по ассортименту интернет-магазина, которые не поместились на одну страницу, а будут доступны при помощи постраничной разбивки. Как минимум, две последующие страницы с результатами, вероятнее всего, посетитель просмотрит. Результаты поискового запроса, на самом деле, удобно хранить в сессии, ведь они персональные. Поиском в интернет-магазине пользуются на удивление часто.
Постоянные покупатели интернет-магазина — просто подарок, когда закончился рекламный бюджет. Если покупатель остался доволен первой покупкой, с очень большой вероятностью покупка будет не последней. Скидки можно раздавать либо по общей истории покупок автоматически, либо согласно номеру дисконтной карты. В общем-то, идея с дисконтными картами выглядит более привлекательно, т. к. номер карты — постоянный идентификатор покупателя. Скидки сохранятся, даже если клиент забудет доступ к своему экаунту либо заведет несколько экаунтов на своих друзей.
Иногда неплохо бы вместо того, чтобы «доставать» замученного менеджера или ждать у моря погоды — взять да и посмотреть, в каком сейчас состоянии мой заказ, и вообще, кто его взял в обработку. Захожу в мой личный кабинет и смотрю. Пусть сайт узнаёт меня по походке — для этого есть cookies. Вводить постоянно логин и пароль — это, несомненно, издевательство.
Рис. 5. Личный кабинет интернет-магазина
Сразу оговорюсь, создание магазина, в котором прежде, чем добавить товар в корзину, нужно регистрироваться, — это полный идиотизм. Он напоминает гастроном, в котором нужно сначала заполнить анкету, прежде чем войти в торговый зал. Регистрация — это средство для работы с постоянными клиентами! Требование стать постоянным клиентом интернет-магазина еще до совершения первой покупки — похоже, вершина нелепости?
Вижу такую рациональную последовательность покупки в магазине:
Внимание! Не нужно перебрасывать покупателя в корзину, достаточно просто открыть ее в новом окне. Вряд ли покупатель супермаркета будет в восторге, если каждый раз при покупке майонеза его будут насильно сажать в тележку. Между прочим, для тех, кто не пробовал, — вылезти из тележки супермаркета не многим труднее, чем вернуться к нужному месту ассортимента интернет-магазина.
Рис. 2. Типичная корзина
Если покупатель постоянный — используем логин и пароль. Но это тоже не вершина удобства. Попробуйте назвать сходу три пароля интернет-магазинов, которыми вы пользовались за последние полгода. И так понятно, что феноменальная память — достояние редких. Чтобы найти пароль, нужно совершить еще пол-десятка магических действий с почтовым клиентом. Покупателя, в первую очередь, нужно узнавать по cookies и пропускать шаг №3! Слышу смутные крики. Что? Безопасность, подделка cookies? Шифровать их нужно, уважаемые, шифровать! Кстати, именно на этом этапе создания заказа есть смысл попросить покупателя взять да и придумать пароль для повторных покупок.
Рис. 3. Контактные данные покупателя интернет-магазина
Собственно, шаг №4 нужен, если доставляем не туда, куда первый раз, для перепроверки контактной информации и дисконтов. Адрес доставки меняется нередко — то на работу доставить, то домой, то знакомой…
Рис. 4. Завершить оформление заказа
И все. Все остальное — это от лукавого. На самом деле, даже шаг №4 — это от лукавого. Подобная схема реализована в интернет-магазине http://www.parfumini.com.ua.
При создании интернет-магазина сразу становится вопрос — как оперативно передать заказ от покупателя менеджеру?
Рис. 1. Online робочее место менеджера
Обычные интернет-магазины чаще всего пересылают детали заказа на email менеджера. Хотя такой подход очень устойчив к перебоям в работе интернет-канала компании, его надежность все же довольно сомнительна. Во-первых, некоторые письма по пути от интернет-магазина к менеджеру запросто могут удаляться спам-фильтрами. Самое обидное, что менеджер даже не будет догадываться о наличии этих заказов. Во-вторых, не всегда письма приходят оперативно. В-третьих, нормально, когда менеджер просто теряется в письмах своего почтового ящика. Кроме того, письма шлются в открытом виде. Любой владелец серверов, через которые проходит ваша корреспонденция, может получить доступ к контактам клиентов вашего интернет-магазина.
Один из подходов — создание online рабочего места менеджера со списком заказов, их состоянием, возможностью просмотра и изменения заказа. На рисунке 1 показан пример рабочего места, реализованного при создании реального интернет-магазина. Рабочее место опрашивает сервер интернет-магазина, используя AJAX на наличие новых заказов каждые 10 секунд. При поступлении нового заказа менеджер получает звуковое сообщение. Разве что глухой не отреагирует на заказ оперативно при таком подходе.
Второй подход — бухгалтерское ПО периодически опрашивает интернет-магазин о новых поступивших заказах по HTTPS в XML формате, например, https://www.myshop/NewOrders?lastorderdate=2009–01–01–12–30–45. Такой поход более удобен, если бухгалтерское ПО выполняет функции CRM системы. Этот метод весьма устойчив к перебоям в работе интернет-канала компании, неплохое решение при создании интернет-магазина.
Третий вариант — скрипт интернет-магазина самостоятельно передает новый заказ прямо в бухгалтерское ПО компании (например, 1С), используя SOAP. Благодаря этому подходу менеджер получит заказ мгновенно при его поступлении. Однако при перебоях в работе интернет-канала между интернет-магазином и офисом компании заказ может потеряться, особенно если интернет-магазин будет недостаточно настойчиво продолжать сообщать о новом заказе.
Если в вашем интернет-магазине 30 товаров или цены никогда не меняются, а товар никогда не заканчивается, тогда проблема актуальности ассортимента у вас не станет — забудьте о ней. Всем ассортиментом можно спокойно управлять прямо на сайте. В противном случае и ежу понятно (хотя, похоже, только ежам в этом мире что-то и понятно), что ассортимент, цену и наличие на складе точно следует хранить в бухгалтерском программном обеспечении. Но тогда сразу появляется проблема интеграции бухгалтерского ПО и интернет-магазина.
Создание интернет-магазина на базе бухгалтерского ПО в качестве веб-сервера либо сервера базы данных интернет-магазина чаще всего уж слишком неудачное решение. Во-первых, пропускная способность интернет-канала между интернет-магазином и внутренней базой данных компании обычно оставляет желать лучшего. Во-вторых, нагрузки, которые испытывает интернет-магазин, обычно выше, чем может позволить себе безболезненно внутрикорпоративная база данных. В третьих, при DoS атаках «ляжет» не только ваш интернет-магазин, но и вся корпоративная база данных.
Второе, что приходит в голову при создании магазина — выгрузка ассортимента в базу данных веб-сервера интернет-магазина. Чаще всего это более трезвая идея. Как выгрузить ассортимент? Инициатором выгрузки должно быть бухгалтерское ПО. Вероятно, удобнее всего сформировать файл в XML формате и разместить его на веб-сервере интернет-магазина по FTP или SFTP (для пущей надежности). После этого скрипт интернет-магазина должен «заметить» новый ассортимент и поместить его в локальную БД (MySQL вполне сгодится, даже для довольно большого ассортимента).
Процедура импортирования бывает длительной, выполняется постепенно и не всегда заканчивается успешно. Поэтому простое удаление всех старых товаров и замещение их новыми — не самое удачное решение при плотной работе с ассортиментом сразу нескольких пользователей. Импорт следует производить, постепенно подменяя старые товары новыми, и только при удачном завершении деактивировать (но не удалять!) товары, которые не подверглись изменениям. Такая схема реализована при создании интернет-магазина косметикии парфюмерии и пока успешно работает.
А что делать, если ассортимент 100 000 наименований, а изменения на складе происходят каждые 10 минут? Создание нагрузки импортированием такого ассортмента, вероятнее всего, «повесит» web-сервер намертво. С другой стороны, нам ничего не мешает импортировать в интернет-магазин лишь изменения в ассортименте. Обычно изменения касаются малого количества товаров: что-то закончилось, что-то появилось. Наверное, нет — точно, это не более 100 позиций за один раз. Такое количество позиций несложно импортировать хоть каждые 2 минуты. Бухгалтерское ПО перед импортированием опрашивает интернет-магазин по HTTP (например, http://www.myshop/ImportDate.xml) о времени последнего удачного импорта и формирует XML файл только с изменениями после указанной даты. И всего-то…
Хотите разместить свой пресс-релиз на этом сайте? Узнать детали