Попытка создать динамические заголовки через PHP

Я хочу создавать динамические заголовки с помощью пользовательского ввода. Мы являемся финансовым веб-сайтом, и у нас есть функция котировок, где пользователи могут вводить тикер, и он отображает финансовую информацию о компании. Страница работает нормально, но я борюсь с заголовками в целях SEO и во избежание дублирования.

Я создал шаблон PHP под названием «цитата», который выполняется, если пользователь вводит запрос тикера. Это код, который я должен создать заголовок:

<title><?php if(isset($_GET['qm_symbol'])){
        $qm_symbol = $_GET['qm_symbol'];
    }
    if (is_page('quote') ) {
          echo $qm_symbol.'- Stock Quote & Stock News For '.$qm_symbol;
    }
?>
</title>

Итак, это работает нормально. Он генерирует заголовки по мере необходимости и ничего не показывает, скажем, в сообщении в блоге, где не было введено никаких данных. Однако, поскольку у меня есть html вне PHP, он по-прежнему генерирует пустой тег заголовка, а затем под ним фактический тег заголовка страницы, сгенерированный моей темой.

В целях SEO я хотел бы выяснить, как его закодировать, чтобы при отсутствии пользовательского ввода он также не выводил никаких тегов заголовков. Любая помощь в этом? Я предполагаю, что это простое решение, но я просто пытаюсь интегрировать html в PHP. Я предполагаю, что не могу процитировать оператор эха, потому что он вызывает переменную, являющуюся символом тикера.


person Dan    schedule 27.03.2019    source источник


Ответы (1)


//At the top of your page
$pageTitle = (isset($_GET['qm_symbol'])) ? $_GET['qm_symbol'] . " - whatever here" : "default title";

//In your head tag
<title><?= $pageTitle ?> </title>

Сделайте что-нибудь вроде этого.

person Lulceltech    schedule 27.03.2019
comment
В случае, если символ не запрашивается, не будут ли пустые теги заголовков размещаться в заголовке других страниц? - person Dan; 27.03.2019
comment
Нет, это заменит их вашим заголовком по умолчанию, который вы должны разместить там, где он говорит заголовок по умолчанию. - person Lulceltech; 27.03.2019
comment
Да, по сути, проблема, с которой я сталкиваюсь, заключается в дублировании заголовков. Потому что у меня будет заголовок по умолчанию из вашего кода, а затем заголовок Genesis. Я пытался выяснить, как изменить вывод заголовка Genesis, чтобы изменить его на мой код, но я не могу понять это, и их поддержка по существу не существует для таких вещей. - person Dan; 27.03.2019
comment
Вы должны использовать htmlentities() для этого, иначе вы откроете себя для XSS-атак с использованием межсайтовых сценариев. Все, что нужно злоумышленнику, — это добавить JavaScript в ссылку на ваш сайт, используя эту функцию, и он будет внедрен на вашу страницу. $pageTitle = (isset($_GET['qm_symbol'])) ? htmlentities($_GET['qm_symbol'], ENT_QUOTES, "UTF-8") . " - whatever here" : "default title"; - Добавь это и тогда получишь мое благословение... :-) - person ArtisticPhoenix; 27.03.2019
comment
Вот сообщение об обмене стека безопасности для этой самой вещи: security.stackexchange.com/questions/140433/ - person ArtisticPhoenix; 27.03.2019
comment
@Dan Я имею в виду, что вы можете сделать это с помощью javascript очень просто: ‹script› document.title = Это новый заголовок страницы.; ‹/скрипт› - person Lulceltech; 27.03.2019
comment
Я не уверен, в частности, в теге title, так как он на самом деле не является частью тела HTML, поэтому он может обрабатываться немного по-другому, но, как правило, вы всегда должны дезинфицировать входные данные (особенно $_GET) перед его использованием. Проблема возникает, когда вы берете параметры URL и оцениваете их как HTML, потому что злоумышленник может провести фишинговую атаку на ваших пользователей, отправив им электронное письмо, похожее на какую-то рекламу или что-то с сайта со ссылкой (на сайт), которая содержит JS в строке запроса, которую вы затем вставляете на страницу и т. д. И используете это для кражи файлов cookie сеанса - person ArtisticPhoenix; 27.03.2019
comment
Это называется атакой Reflected XSS. - person ArtisticPhoenix; 27.03.2019