Наш чеклист для фильтров на сайтах

    Довольно часто на сайтах е-коммерса нас просят реализовать фильтры. Хороший фильтр — довольно дорогая игрушка. Вообще, они не всегда уместны — пользователю проще посмотреть глазами на список, чем разбираться в логике разработчика фильтра. Конечно, если в этом списке не так много элементов. Скажем, не больше 200 в каждом разделе. Ниже в виде проверочного списка для наших QA, я зафиксировал некоторые требования, которые мы настойчиво внедряем на своих проектах с этого года. Стандартизация, ептэ.

    Эти требования разумны. Часть из них трудно реализуема. Часть — очевидна. Часть — зависит от контекста. Но в целом они довольно универсальны. Если будут какие-то вопросы по конкретным пунктам — велкам в комментарии.



    Важность: Extra High


    [ ] Если фильтр не применен — адресная строка браузера содержит ЧПУ без дополнительных параметров.

    [ ] При первом заходе на страницу категории в url-е не должны быть «вопросиков».
    Нужно зайти на страницу каталога или категории и убедиться, что использован ЧПУ.

    Пример: Zimzum.

    [ ] При переходе на товар из каталога — ссылка «назад» в браузере должна работать корректно и восстанавливать параметры.

    Пример: Zolotoy-telets.

    Почему именно так: Если пользователь что-то выбрал в фильтре, получил выборку, зашел в один из товаров — то кнопка «назад» в браузере должна стать активной (был совершен переход «глубже»). Кроме этого, она должна привести пользователя не просто на страницу со сброшенным фильтром, а именно на страницу с выбранными пользователем параметрами — система не должна заставлять пользователя выбирать параметры каждый раз.

    [ ] Для всех полей фильтра убедиться, что загружаются корректные данные из соответствующих справочников.

    [ ] Для выпадающих списков и чекбоксов проверить полноту выдаваемой информации.
    [ ] Для полей ввода проверить наличие автоподстановок (чузен).
    [ ] Для списков и радиобаттонов проверить возможность отмены выбранного значения, после того, как какое-либо значение уже выбрано.
    [ ] Проверить, что вывод данных из справочников — отсортирован.

    [ ] При открытии ссылки с отфильтрованными данными — состояние фильтра восстанавливается.

    [ ] Фильтр динамически изменяет URL при применении параметров фильтрации.
    [ ] При открытии ссылки с отфильтрованными данными в отдельном окне в режиме инкогнито состояние фильтра и отфильтрованные данные восстанавливаются, не вызывая редиректов, мигания фильтра или лишних переходов.
    [ ] Изменение каждого поля из фильтра сохраняется и восстанавливается в ссылке.

    Пример: Trainer.ru.

    Почему именно так: Пользователь должен иметь возможность отфильтровать каталог и отправить ссылку на полученную выборку другому пользователю. Другой пользователь при переходе по полученной ссылке должен попадать на отфильтрованную страницу.

    [ ] Все поля в фильтре корректно влияют на фильтруемый список.

    [ ] Проверить фильтрацию раздельно по каждому полю.
    [ ] Проверить фильтрацию по комбинации полей.

    Это важно: Часто при разработке множественного фильтра перед разработчиками встает дилемма: использовать логический оператор «и» или оператор «или». Применительно к каталогу это значит: при выбранном параметре «зеленый цвет» и «размер XL» будут показаны только зеленые футболки размера XL или же все зеленые футболки и все с размером XL? Как правило, такие вопросы решаются индивидуально с руководителем проекта.

    [ ] Кнопка сброса фильтра корректно работает.

    [ ] Сбрасываются как параметры фильтрации, так и URL.
    [ ] Перестраивается список товаров.

    Пример: Zaitsev.

    Важность: High


    [ ] Предусмотрена пейджинация для поисковых машин.

    Пример: Restlook.

    Почему именно так: Товары в каталоге могут подгружаться «бесконечно», с помощью JavaScript. Поисковая машина «не видит» все, что находится внутри JavaScript, однако необходимо, чтобы все товары были проиндексированы. Решение: если у вас пейджинация по прокрутке (или подгрузка по AJAX, по клику на кнопку «Далее») — предусмотрите статическую ссылку, по которой поисковик сможет проиндексировать каталог, как это сделано в примере.

    [ ] Robots.txt обеспечивает защиту от дублирования контента при индексации.

    [ ] Страницы каталога без фильтра должны быть открыты для индексации (включая индексацию постраничной навигации).
    [ ] Страницы с примененным фильтром должны быть закрыты от индексации.

    Пример: Sapato — robots.txt.

    Почему именно так: Когда к каталогу применяется фильтр — перестраивается страница и меняется адрес. Однако контент остается прежним. Поисковая машина воспринимает страницу отфильтрованной выдачи как отдельную самостоятельную страницу, притом как «плохую», с дублирующимся контентом. Решение: в файле robots.txt разрешить индексацию только страниц категорий и страниц с пейджинацией. Остальные (например, отфильтрованные по цвету, размеру и другим подобным параметрам) — запретить индексировать.

    [ ] Фильтр не создает излишних SQL-запросов.

    [ ] Работает быстро, нет необоснованных выборок.

    Пример: Zappos.

    [ ] Списки, чек-листы, деревья и прочие поля должны содержать только те элементы, по которым могут быть найдены позиции.

    [ ] Если фильтрация по какому-либо полю или критерию вернет 0 позиций — необходимо убирать ее из фильтра или делать неактивной (в зависимости от дизайна).

    Пример: Tiffany.

    Это важно: Подобные операции существенно загружают сервер.

    [ ] Зависимые поля обновляются синхронно.

    [ ] При изменении одного из зависимых полей — остальные обновляют свои данные (обновляют списки данных, меняют активность значений и проч.).

    Пример: Ebazaar.

    Почему именно так: Такая механика избавляет пользователя от «нулевых» выдач, сокращает количество шагов к поиску нужных товаров. Недоступные зависимые поля можно скрывать, либо делать недоступными.

    [ ] Предусмотрен прелоадер на обновление выборки.

    Пример: Sapato.

    [ ] Предусмотрен прелодер на обновление параметров фильтра.

    Замечание: На некоторых сайтах (тот же Sapato) предусмотрен один общий прелоадер для обновления выборки и параметров фильтра. Такое вполне приемлемо, хотя нам кажется, что это не самое изящное решение.

    [ ] Предусмотрен и корректно работает предварительный расчёт количества найденных позиций.

    Пример: Interno и Яндекс.Маркет.

    Почему именно так: В зависимости от дизайна — может быть предусмотрен как на кнопке фильтрации, так и рядом с каждым значением полей фильтра (указывается, сколько будет найдено элементов, если используется фильтр по требуемому критерию).

    Важность: Normal


    [ ] Фильтр с подгрузкой каталога по ajax корректно восстанавливает позицию в списке.

    Пример: Restlook.

    Почему именно так: Если пользователь подгрузил несколько страниц по пейджинации, это должно менять url таким образом, чтобы при переходе по нему он сразу бы попадал на нужную страницу пейджинга. Подгружать либо сразу в html, либо ajax-ом, как договоритесь с руководителем проекта.

    [ ] Фильтр излишне не забивает кеширующую систему.

    [ ] Для фильтров с большим объемом характеристик и большим каталогов проверить обоснованность кеширования результатов.
    [ ] Наличие теггированного кеша.
    [ ] Частоту сброса.

    Почему именно так: Допустим, пользователь выбрал параметры: цвет «красный», размер «XL», материал «хлопок», модель «Slim», цена: 1500 руб. (цену можно было указать вручную, с клавиатуры). Вероятность повтора именно таких условий в другой выборке мала, соответственно, не стоит кешировать такую выборку. В то же время, выдача по таким параметрам может содержать элементы, которые могут требовать дополнительной выборки. Их кешировать можно.

    [ ] Задано поле для сортировки по умолчанию.

    [ ] Предусмотрено на дизайн-макете.

    [ ] Выбранные параметры сортировки — очевидны.

    [ ] Очевидно, по какому полю и в каком направлении применена сортировка сейчас.
    [ ] Очевидно, как поменять поле и направление сортировки.

    Пример: Ebazaar.

    Это важно: Иконка рядом с полем сортировки («стрелка вверх» или «стрелка вниз») должна отражать текущее состояние сортировки.

    [ ] Кнопка применения фильтра всегда находится в зоне видимости.

    Пример: Bulgary.

    Почему именно так: Как правило, кнопка применения фильтра должна всегда присутствовать на экране с фильтром (пользователь должен ее видеть).

    [ ] Хлебные крошки при просмотре товара позволяют вернуться к правильно отфильтрованному списку.

    Пример: Restlook.

    Это важно: Когда пользователь попадает на страницу товара — для удобства навигации часто используют хлебные крошки. При этом, если пользователь пришел на товар из фильтра, крайне желательно по хлебным крошкам вернуть его на результаты с примененным фильтром.

    Хранить параметры фильтра в ссылках хлебных крошек нельзя, чтобы обеспечить отсутствие страниц-дублей для поисковых систем. Ссылки по хлебным крошкам должны так же корректно отрабатывать, если пользователь перешел на карточку товара по прямой ссылке (в этом случае фильтр применяться не должен).

    Возможное (но не единственное решение и не самое оптимальное) решение — вместо хлебных крошек использовать ссылку «Вернуться к каталогу». В адресе ссылки должен быть указан раздел каталога, к которому осуществляется возврат и дополнительный параметр, сигнализирующий о том, что, если пользователь использовал фильтр, то нужно восстановить его состояние (e.g. http://<product_cateory>?back=true).

    Для того, чтобы восстановить состояние фильтра — фильтры предварительно сохраняется в сессию, раздельно для каждой категории.

    [ ] При изменении параметров фильтра рядом с полем появляется кнопка «Показать».

    Пример: Ebazaar.

    Почему именно так: Если предусмотрено дизайном — при изменении параметров фильтра рядом с соответствующим полем сразу же появляется кнопка «Показать» с указанием количества элементов, которые будут найдены. Это позволяет пользователю сориентироваться в том, насколько ему подходят выбранные параметры фильтра до того, как они будут применены.

    Важность: Low


    [ ] Хлебные крошки при просмотре товара формируются с учетом параметров фильтрации.

    Пример: 6pm.

    Замечание: Спорное, но интересное решение.

    [ ] Выбираемые в фильтре параметры появляются в виде перечня с возможностью сброса любого из выбранных параметров.

    Пример: Trias.

    Почему именно так: Если предусмотрено дизайном — выбранные параметры фильтра попадают на специальную панель. У каждого параметра на панели предусмотрен крестик для отмены фильтрации по этому параметру. В некоторых случаях это удобно для пользователя, но отталкиваться всегда нужно от конкретного случая.

    Чеклист в Google-доке.
    Пользуйтесь и дополняйте.

    А тут видео с холивара про фильтры. С обсуждениями ждем в комментах.

    Сибирикс

    91,00

    Компания

    Поделиться публикацией
    Комментарии 17
      +5
      Большой чеклист, интересно посмотреть на сайт, где выполняются все эти пункты.

      У нас есть поиск+фильтры для MODX, где из коробки работает процентов 80 из вашего списка, можно покликать на демо-сайте.
        +1
        Я б ещё добавил пункт — если уж есть возможность изменить праметры фильтрации слайдерами, то дайте пользователю возможность ввести и числовое значение руками (тем более, что там даже курсор моргает):

          0
          У меня не мигает, наверное, зависит от браузера.

          Это кастомизируется на уровне оформления, совсем несложно. На демо-сайте, понятно, все работает без дополнительных настроек.
            +1
            Мне намного больше нравится вот такой вариант, недавно случайно наткнулся (прямо под полем ввода слайдер; границы поля служат также границами слайдера; это две картинки):
            image
          –2
          А весь чек-лист отрабатывается вручную или используются инструменты для автоматического тестирования?
            –1
            Ребята, а без гоп-лексики никак? Отбивает желание читать, честное слово.
              0
              Вам слово «ептэ» не понравилось? Дальше читать не пробовали?
                +2
                Конечно, гоп-лексика, правильно писать: йопта!
              0
              Спасибо, очень кстати.
              Разрабатываю новую систему фильтрации для проекта и подобный перечень очень упростит работу, да и результат, думаю, будет лучше.
                +2
                Еще здорово когда фильтры не могут указывать на пустую выборку. По мере заполнения фильтров они должны делать неактивными в других фльтрах пункты выкидывающие на «404».
                  0
                  Не могли бы вы развернуть идею? Ещё круче, если с примером.
                    0
                    Да ладно? На Яндекс.Маркете посмотрите. Например, подбираем смартфон. Если развернуть все параметры в расширенном поиске, и ставить галочки, то сразу будет видно, что некотрые галочки в других параметрах красятся серым. Их можно выбрать, но сразу покажет 0 моделей и кнопка «Показать» станет неактивной.
                      0
                      А, понял. Правда, конкретно на я.маркете просто красятся (никто не мешает выбрать сочетание фирмы Apple и ОС Android для телефона, но и найдёт 0 моделей, логично).
                      Просто можно было бы и проще выразить мысль, например «сделать невозможным выбор взаимоисключающих опций».
                        0
                        Что это они взаимоисключающие? Если я выберу иос и андроид, то фильтр должен найти И аппараты на иос И аппараты на андроиде.

                        Тут о другом. Например, «Количество SIM-карт» — 1,2,3,4 — если выбрать 4 сим-карты, то увидите 1 модель, а выбрать андроид, винфон, иос или что-то ещё уже нельзя: 4-хсимочный телефон — простая звонилка.

                        Но это же не означает, что если завтра в маркете появится телефон с 4 симками на андроиде, то андроид всё равно выбрать нельзя.

                        Как раз именно что фильтр контролирует наличие товаров по подбираемым параметрам и делает неактивными те параметры, по которым ничего подобрано не будет.
                        0
                        Вроде это описано в посте — "[ ] Зависимые поля обновляются синхронно."?
                      0
                      Да, этот пункт есть в чеклисте ([ ] Зависимые поля обновляются синхронно) и мы постоянно за этим следим.

                      Есть, правда, тонкости. Допустим, когда границы цен можно задавать самому — то у пользователя все равно будет возможность получить нулевую выборку (например, есть два товара, один 10 рублей, второй — 1000, а ползунки цен сдвинули на 100-200). Ну и само обновление фильтра в таком случае оборачивается большим количеством запросов.

                      Но в любом случае, если скорость работы приемлемая, то этот пункт очень даже желательно выполнять.
                      –3
                      > Если фильтр не применен — адресная строка браузера содержит ЧПУ без дополнительных параметров.

                      О, да, просто ультрамегасупервысокая важность)
                      Погугли чем чпу отличается от псевдостатики ;-)

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое