Установка Seo Shield Client

  1. В кореневую директорию сайта (расположение главного index.php) заливаем папку seoshield-client
  2. Перейдя по URL http://<domain_name>/seoshield-client/ должны увидеть белую страницу и 200ый статус HTTP ответа (в случае если этого не произошло, возможно в .htaccess сайта необходимо добавить исключение для адреса "/seoshield-client/").
  3. Далее необходимо подключить SeoShield Client к сайту. Для этого выполните следующие действия в главном исполняемом php-файле, обычно - index.php
    • Подключить файл seoshield-client/main.php
    • Вызвать функцию seo_shield_start_cms
    • Пропустить сформированный HTML-код через функцию seo_shield_out_buffer с помощью функции ob_start или напрямую передав его в функцию

Примеры подключения:

if(file_exists('seoshield-client/main.php'))
{
    include_once('seoshield-client/main.php');
    if(function_exists('seo_shield_start_cms'))
       seo_shield_start_cms();
    if(function_exists('seo_shield_out_buffer'))
       ob_start('seo_shield_out_buffer');
}


$html = ...
if(file_exists('seoshield-client/main.php'))
{
    include_once('seoshield-client/main.php');

    if(function_exists('seo_shield_start_cms'))
        seo_shield_start_cms();

    if(function_exists('seo_shield_out_buffer'))
        $html = seo_shield_out_buffer($html);
}
echo $html;


Также рекомендуется добавить исключения, при которых SeoShield Client не должен срабатывать. Например, страницы админ-панели сайта либо POST-запросы.
Предположим, что у Вас URL админ-панели такой: http://example.com/admin/...
В таком случае исключение будет иметь вид:
if(isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/admin') === false && $_SERVER['REQUEST_METHOD'] === 'GET')
{
    if(file_exists('current/seoshield-client/main.php'))
    {
        ...подключение SeoShield Client...
    }
}

Проверка на НЕ ajax-запрос:
if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'))
{
     ...
}


Фреймворки Yii, ZF2

Вызов кода нужно делать до строчек Zend\Mvc\Application::init($config)->run(); либо (new yii\web\Application($config))->run();

 

WordPress

Советуем вносить код подключения в файл wp-config.php

 

OpenCart и схожие CMS

В некоторых CMS вывод контента осуществляется методами самой CMS. Например вы можете увидеть в index.php следующее $response->output();
В таком случае:

Вариат №1. Получить контент такми образом:
ob_start();
$response->output();
$html = ob_get_contents();

И далее "пропустить" его через модифицирующую функцию SeoShield Client:
$html = seo_shield_out_buffer($html);

В результате подключение будет выглядеть следующим образом:
ob_start();
$response->output();
$html = ob_get_contents();
if(file_exists('seoshield-client/main.php'))
{
    include_once('seoshield-client/main.php');
    if(function_exists('seo_shield_start_cms'))
        seo_shield_start_cms();
    if(function_exists('seo_shield_out_buffer'))
        $html = seo_shield_out_buffer($html);
}
echo $html;
Внимание! Этот вариант не сработает, если на сайте включен метод который сжимает контент перед тем как отдать его браузеру.

Вариант №2. Найти в исходниках класс Response, стандартный путь к нему: system/library/response.php. В этом файле должен быть метод output с примерно таким содержимым:
if ($this->output) {
    if ($this->level) {
        $output = $this->compress($this->output, $this->level);
    } else {
        $output = $this->output;
    }    
        
    if (!headers_sent()) {
        foreach ($this->headers as $header) {
            header($header, true);
        }
    }
    
    echo $output;
}
Тогда этот метод можно переписать следующим образом:
if ($this->output) {
    if(file_exists('seoshield-client/main.php'))
    {
        include_once('seoshield-client/main.php');
        if(function_exists('seo_shield_start_cms'))
            seo_shield_start_cms();
        if(function_exists('seo_shield_out_buffer'))
            $this->output = seo_shield_out_buffer($this->output);
    }

    if ($this->level) {
        $output = $this->compress($this->output, $this->level);
    } else {
        $output = $this->output;
    }    
        
    if (!headers_sent()) {
        foreach ($this->headers as $header) {
            header($header, true);
        }
    }
    
    echo $output;
}



При правильном подключении, перед закрывающим тегом body должен появится проверочный комментарий:
<!--{seo_shield_out_buffer}-->

Подписаться Подписаться Подписаться