Несколько get параметров в url
Правильный способ передать несколько значений для одного и того же имени параметра в запросе GET
Я ищу правильный способ передать несколько значений для одного и того же имени параметра в запросе GET.
Я видел такие URL-адреса:
И я видел такие URL-адреса:
Насколько я понимаю, первое правильное, но я не могу найти для него никаких ссылок. Я взглянул на спецификацию http, но ничего не увидел о том, как должна быть составлена «запросная» часть URL-адреса.
Итак, может ли кто-нибудь указать мне на официальный справочный источник, чтобы подтвердить, какой вариант правильный?
7 ответов
Действительно, нет определенного стандарта. Чтобы подтвердить эту информацию, загляните в Википедию в главе Строка запроса. Вот такой комментарий:
Хотя окончательного стандарта не существует, большинство веб-фреймворков позволяют несколько значений, которые должны быть связаны с одним полем. [3] [4]
Кроме того, если вы посмотрите на RFC 3986, в разделе 3.4 Query, нет определения для параметров с несколькими значениями.
Однако, поскольку вы разрабатываете API, я предлагаю вам сделать то, что для вас проще всего, поскольку у вызывающего API не будет особых проблем с созданием строки запроса.
Я бы посоветовал посмотреть, как браузеры обрабатывают формы по умолчанию. Например, посмотрите на элемент формы и то, как он обрабатывает несколько значений из этого примера в w3schools.
Для использования PHP:
Надеюсь, это поможет любому, кто ищет более «стандартный» способ решения этой проблемы.
Я описываю простой метод, который очень плавно работал в Python (Django Framework).
1. Отправляя запрос, отправляйте его так:
2. Теперь в моем бэкэнде я разделяю полученное значение с помощью функции разделения, которая всегда создает список.
Пример: Итак, если я отправлю два значения в запросе,
Тогда фильтр данных
Если я отправлю только одно значение в запросе,
Тогда результат фильтра
3. Чтобы отфильтровать данные, я просто использую функцию «in»
Который, грубо говоря, выполняет SQL-эквивалент
С первым запросом и,
Со вторым запросом.
Это также будет работать с более чем двумя значениями параметров в запросе!
Вышеупомянутые решения не сработали. Он просто отображал последние пары ключ / значение, но это действительно так:
http: // localhost /? key [] = 1 & key [] = 2
Три возможных способа отправки многозначных полей или массивов:
http: // localhost: 3000 / foo? id [] = a & id [] = b
(ПРИМЕЧАНИЕ. В этом случае важно присвоить ключ запроса some_name [], чтобы результирующие переменные запроса регистрировались PHP как массив)
Стандарта нет, но большинство фреймворков поддерживают оба, например, для java spring вы можете видеть, что он принимает оба здесь
И Spring MVC отобразит параметр идентификатора, разделенный запятыми:
Как найти дубли страниц с незначащими GET-параметрами
Дубли страниц на сайте могут появиться в поиске вместо ценных страниц сайта или замедлить их обход и индексирование.
Вообще, дубли — это страницы сайта, содержание текста в которых полностью или практически совпадает. Страницы с GET-параметрами в URL тоже могут быть дублями. Если GET-параметр влияет на содержание страницы — это не дубль. А если GET-параметр не меняет контент страницы, то этот параметр называют незначащим и страницу стоит скрыть от поиска.
Расскажем подробнее, что такое незначащие GET-параметры, как найти дубли с такими параметрами и убрать их.
Что такое дубли страниц с незначащими GET-параметрами
GET-параметр — это параметр, который передается серверу в URL страницы. Он начинается с вопросительного знака. Если URL содержит более одного параметра, то эти параметры разделяются знаком «&». Самый частый случай появления дублей из-за незначащих параметров — метки для задач веб-аналитики. Например, utm_source, utm_medium, from. Такими метками владельцы сайтов привыкли помечать трафик. Фактически эти URL одинаковые, на них опубликован одинаковый контент. Но формально адреса разные, так как различаются GET-параметрами в URL. Соответственно, и поиск тоже может посчитать их разными. Такие страницы и называются дублями с незначащими GET-параметрами.
Наличие дублей страниц с незначащими GET-параметрами не приносит пользы и может негативно сказаться на взаимодействии сайта с поисковой системой.
Зачем отслеживать дубли
1) Скорость обхода. Когда на сайте много дублей, роботы тратят больше времени и ресурсов на их обход, вместо того, чтобы обходить ценный контент. А значит, ценные страницы вашего сайта будут медленнее попадать в поиск.
2) Неуправляемость. Так как поисковой робот произвольно выбирает, какой из дублей показывать в поиске, то на поиск могут попасть не те страницы, которые вам нужны.
3) Влияние на поиск. Если незначащие параметры не добавлены в clean-param, робот может обходить эти страницы и считать их разными, не объединяя их в поиске. Тогда поисковый робот будет получать разные неагрегируемые сигналы по каждой из них. Если бы все сигналы получала одна страница, то она имела бы шансы показываться выше в поиске.
4) Нагрузка на сайт. Лишний обход роботом также дает нагрузку на сайт.
Например, на сайте по продаже билетов есть форма заявки на обратный звонок. При ее заполнении в url передается GET-параметр?form=show1, — он сообщает информацию о том, какой спектакль с этой страницы выбрал пользователь в заявке, хотя контент самой страницы никак не меняется. Таким образом, поисковой робот будет тратить время на обход множества одинаковых страниц, различающихся только GET-параметрами в URL, а до ценных страниц сайта доберется значительно позже.
Для интернет-магазинов типичный пример — страницы с фильтрами. Например, если пользователь выбирает товары в дорогом ценовом диапазоне, изменяя значения в фильтре «Цена», то в большинстве случаев ему будет показана страница с одними и теми же товарами. Таким образом, поиск будет получать сигналы о множестве одинаковых страниц, отличающихся только GET-параметром price= в URL.
Как обнаружить дубли
Теперь находить одинаковые страницы стало проще: в разделе «Диагностика» появилось специальное уведомление, которое расскажет про дубли из-за GET-параметров. Алерт появляется с небольшой задержкой в 2-3 дня, поэтому если вы увидели в нем исправленные страницы, не пугайтесь — это может быть связано с задержкой обработки данных. Дубли с параметром amp, даже если они у вас есть, мы не сможем показать в алерте.
Подписываться на оповещения не нужно, уведомление появится само.
Как оставить в поиске нужную страницу
1. Добавьте в файл robots.txt директиву Clean-param, чтобы робот не учитывал незначащие GET-параметры в URL. Робот Яндекса, используя эту директиву, не будет много раз обходить повторяющийся контент. Значит, эффективность обхода повысится, а нагрузка на сайт снизится.
2. Если вы не можете добавить директиву Clean-param, укажите канонический адрес страницы, который будет участвовать в поиске. Это не уменьшит нагрузку на сайт: роботу Яндекса всё равно придётся обойти страницу, чтобы узнать о rel=canonical. Поэтому мы рекомендуем использовать Сlean-param как основной способ.
3. Если по каким-то причинам предыдущие пункты вам не подходят, закройте дубли от индексации при помощи директивы Disallow. Но в таком случае поиск Яндекса не будет получать никаких сигналов с запрещенных страниц. Поэтому мы рекомендуем использовать Сlean-param как основной способ.
Директива Clean-param — межсекционная, это означает, что она будет обрабатываться в любом месте файла robots.txt. Указывать ее для роботов Яндекса при помощи User-Agent: Yandex не требуется. Но если вы хотите указать директивы именно для наших роботов, убедитесь, что для User-Agent: Yandex указаны и все остальные директивы — Disallow и Allow. Если в robots.txt будет указана директива User-Agent: Yandex, наш робот будет следовать указаниям только для этой директивы, а User-Agent: * будет проигнорирован.
Подробнее о работе со страницами-дублями читайте в Справке.
HTTP-запрос методом GET.
Одним из способов, как можно отправить запрос по протоколу HTTP к серверу, является запрос методом GET. Этот метод является самым распространенным и запросы к серверу чаще всего происходят с его использованием.
Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.
Если у вас есть желание погрузиться в тему серверного программирования глубже, все мои уроки здесь.
Браузер передаст серверу примерно следующую информацию:
Запрос состоит из двух частей:
1. строка запроса (Request Line)
2. заголовки (Message Headers)
Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию. Это можно делать с помощью специальных GET параметров.
Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:
К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:
Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.
Вот пример, как это можно сделать на языке PHP.
В результате выполнения этого кода в браузере выведется:
Кстати, переходя по какой-либо ссылке, которая оформлена в HTML вот так:
мы тоже выполняем запрос к серверу методом GET.
Все мои уроки по серверному программированию здесь.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Или зарегистрируйтесь через социальные сети:
Найдены страницы-дубли с GET-параметрами
Нет времени читать статью?
Но вам требуется продвижение сайта или создание сайта-лидера, идеального для SEO? Тогда вы можете оставить заявку на продвижение или заявку на создание сайта. Если вы собираетесь продвигать сайт самостоятельно — продолжайте чтение!
У сайта появились дубли страниц, которые мешают ему продвигать и создают проблемы: идет снижение индексации, ранжирования. Каждый день поисковая система индексирует определенный сайт и у него есть свой лимит к домену в сутки. Когда все лимиты уходят на мусорные страницы и URL, становится обидно, потому что качественные страницы с уникальным контентом остались в стороне.
Как узнать есть ли дубли на сайте? Например, в вебмастере Яндекс появилось сообщение: «Найдены страницы дубли с GET параметрами». Это значит, что поисковая система передает информацию владельцам сайтам, что контент есть на разных страница, а он одинаковый везде.
Что такое get-параметры на сайте
GET параметры в URL — специальные динамические параметры, которые позволяют изменять контент на страницах сайта. Часто находится в URL адресе сразу же после «?» и может разделяться «&». Часто владельцы сайтов интернет магазинов используют GET запросы и параметры для фильтров на сайте, либо для сортировки.
Как избавиться от ошибки — Найдены страницы дубли с GET-параметрами
Простой и рабочий способ избавиться сейчас от таких дублей внести правки в ваш файл Robots.txt, через директорию и правила Clean-param или Disallow.
Если вы видите, что у вас появились дубли (дублированные страницы) из-за GET параметров, то Яндекс предлагает сделать вам правило Clean-param, которое будет действовать именно для Яше.
Это позволит поисковому роботу понять и объединить страницы, которые являются дублями. Если произошли изменения, тогда бот сможет их проверить и убрать лишний мусор из поиска.
Как использовать Clean-param
Как правильно использовать Clean-param, ниже будет небольшой пример сайта магазина. Например у нас на сайте есть такие дубли:
Чтобы запретить индексацию этих сортировок и фильтров, нужно добавить в robots.txt следующее:
User-agent: Yandex
Clean-param: sort&order /cat/auto/nissan/
sort&order – это уникальные параметры, которые могут меняться и требуют учета;
/cat/auto/nissan/ — это категория разделах, и те которые начинаются с /cat/auto/nissan/.
Как использовать Disallow
Другой проверенный способ избавиться от дублей с GET-параметрами можно, используя директиву Disallow. Опять же берем те же адреса, что выше в примере.
Задаем правило в файле robots.txt:
Как полностью закрыть все параметры GET одной строкой?
Однако нужно понимать, что если вы полностью закроете все страницы от индексации, иногда есть специальные страницы, которые могут быть обязательны.
Однако способами выше вы сможете решить проблему в Вебмастере Яндексе, гугле.
Ошибка Я. Вебмастера: найдены страницы дубли с GET-параметрами — что делать
Дубли страниц могут приводить к потери позиций в поисковой выдаче и снижать скорость индексации. Стоит понимать, что у поискового робота есть определенный лимит запросов к домену в день. Поэтому существует вероятность того, что он потратит все лимиты на сканирование мусорных страниц и не доберется до страниц с уникальным контентом.
О наличии проблемы с дублированным контентом свидетельствует сообщение в панели Вебмастера: «Найдены страницы дубли с GET параметрами». В своем сообщении Яндекс информирует вебмастера о том, что на некоторых страницах сайта размещен одинаковый контент, различающийся только гет-параметрами.
Что такое get-параметры на сайте
Если в поиске есть дублированные страницы из-за гет-параметров, Яндекс предлагает воспользоваться правилом Clean-param в robots.txt (правило действительно только для Яндекс, Google его не воспринимает).
В результате использования Clean-param поисковый робот Яндекса объединяет сигналы с дублированных страниц на основной. После того, как краулер узнает обо всех произошедших изменениях, страницы с не имеющими значение гет-параметрами исчезнут из поисковой выдачи.
Как использовать Clean-param
Для понимания того, как используется Clean-param, стоит привести простой пример. Существуют дубли страницы со следующими гет-параметрами:
Чтобы в результатах поиска учитывалась только основная страница http://mysite.ru/cat/auto/nissan/, нужно задать правило Clean-param в файле robots.txt:
User-agent: Yandex
Clean-param: sort&order /cat/auto/nissan/
Как использовать Disallow
Избавиться от страниц-дублей с GET-параметрами можно, используя директиву Disallow. Для примера возьмем те же страницы-дубли:
Чтобы в результатах поиска учитывалась только основная страница http://mysite.ru/cat/auto/nissan/, нужно задать правило в файле robots.txt:
User-agent: *
Disallow: *?sort=
Disallow: *&order=
Также можно закрыть от индексации ВСЕ Get-параметры одним правилом?
User-agent: *
Disallow: *?
Будьте осторожны! Используйте директиву Disallow очень внимательно, чтобы случайно не закрыть от индексации нужные страницы (например, не используйте правило, если карточки товара или категории в обязательном порядке содержат get-параметр в url).