Как быстро изменить абсолютные ссылки на относительные в сайтах WordPress 43


Здравствуйте, уважаемые друзья. Сегодня поговорим о том, как быстро изменить абсолютные ссылки на относительные в сайтах и блогах WordPress. А также немного затронем сложный способ, который подойдёт для опытных владельцев сайтов.

Итак, друзья эта информация пригодится вам уже в ближайшем будущем. Так как рано или поздно мы все будем вынуждены перейти с протокола http на https. Этого от нас требует Гугл, так как с 2017 года незащищённые сайты будут понижаться в поисковой выдаче. Это по типу внедрения адаптивного дизайна, когда Гугл тоже выкатил ультиматум таким сайтам.

А этот переход подразумевает много технической возни и замену всех ссылок на сайте.

Сейчас подробно останавливаться на протоколах не буду, поговорим об этом в отдельной статье, где и разберём весь пошаговый план по смене протокола.

Перед началом работы со ссылками сделайте резервную копию сайта. Обязательно!

Чем отличаются абсолютные и относительные ссылки

Ссылок на вашем сайте достаточно много – это ссылки страниц, статей, меню, изображений, метатегов, скриптов и так далее. Все эти ссылки являются абсолютными. Они имеют такой вид:

http://site.ru/content/

А нужно изменить эти ссылки на относительные, которые делятся на два варианта.

  1. Относительные ссылки вне зависимости от домена:

https://site.ru/content/ — абсолютная.

/content/ — относительная.

  1. Относительные ссылки вне зависимости от протокола.

https://site.ru/content/ — абсолютная.

//site.ru/content/ — относительная.

Мы будем менять ссылки на последний вариант. Так как именно такие адреса ссылок понадобятся при смене протокола.

Изменение ссылок с помощью плагина HTTP / HTTPS Remover

Вообще, на выбор есть 2 пути, решить задачу с помощью плагина и без него. Второй вариант обсудим дальше. А сейчас самый простой и быстрый, с помощью HTTP / HTTPS Remover плагина.

Я пересмотрел много плагинов. Окончательный выбор был между двумя претендентами HTTP / HTTPS Remover и Velvet Blues Update URLs, которые вы можете использовать.

HTTP / HTTPS Remover – не имеет настроек и выполняет своё назначение сразу после активации.

Velvet Blues Update URLs – нужно настраивать, зато его можно удалить после изменения ссылок.

Выбор за вами, я же остановился на первом. Просто устанавливаете и активируйте этот плагин – и он работает.

Установленный плагин

Обращаю ваше внимание, что этот плагин меняет абсолютные ссылки на относительные везде, а если ссылка на ваш сайт была без анкора (текста), то в ссылке автоматически изменится протокол. Так как плагин подразумевает использование при изменении протокола.

Изменение ссылок в базе данных

Этот способ сложнее, но также позволяет изменить массово ссылки. Для этого вам нужно открыть базу данных сайта. Сделать это можно через админку хостинга в разделе phpMyAdmin.

Далее, выбрав базу данных, в разделе SQL нужно ввести следующие команды:

Изменение адреса и имени сайта.

UPDATE wp_options SET option_value = REPLACE(option_value, 'http://1zaicev.ru/', 'https://1zaicev.ru/') WHERE option_name = 'home' OR option_name = 'siteurl';

Изменение URL страниц сайта и ссылок в тексте.

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://1zaicev.ru/', 'https://1zaicev.ru/');
UPDATE wp_posts SET guid = REPLACE (guid, 'http://1zaicev.ru/', 'https://1zaicev.ru/') WHERE post_type = 'attachment';

Изменение ссылок в метаданных.

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://1zaicev.ru/','https://1zaicev.ru/');

Изменение ссылок в комментариях.

UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'http://1zaicev.ru/', 'https://1zaicev.ru/');
UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, 'http://1zaicev.ru/', 'https://1zaicev.ru/');

Вставка кодов в БД

Подробно останавливаться на этом способе не буду, так как если вы не работали с базой данных, то это не самый лучший момент начать. А те, кто работал, для них и объяснять ничего не надо.

Вот собственно и всё, что я хотел рассказать и показать в этой статье. Этот подготовительный этап будет нужен в дальнейшем при переходе с протокола http на https. Чем я собираюсь заняться в ближайшее время.

На сегодня у меня всё. Друзья, я желаю вам успехов! До встречи в новых статьях.

С уважением, Максим Зайцев.



Если статья оказалась для Вас полезной, поделитесь с друзьями, жмите на кнопочки:


Подписывайтесь на новые статьи!


Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

43 коммент. к статье “Как быстро изменить абсолютные ссылки на относительные в сайтах WordPress

  • Олег

    Максим привет!

    Давно тебе не писал. Но тут повод появился )
    Есть ещё один хороший плагин Search Regex. Включаешь его, настроек там особо никаких нет, всё интуитивно понятно, и чтоб в базу данных в саму не лезть, можно все ссылки поменять через этот плагин. Очень удобно, попробовал, проблем никаких, ну конечно лучше сохранить резервные копии и базы данных и файлов сайта.

    • Максим Зайцев От автора

      Олег, привет. О Search Regex я знаю, и писал статью на эту тему. Хороший плагин, его тоже можно использовать. Только вот у меня на одном сайте, в ссылках скриптов и стилей ссылки пришлось менять вручную. Но, скорей всего это связано с особенностями шаблона.

  • Виктория Карпова

    Максим, привет! И спасибо большое за статью! Как раз тоже собралась заняться за меной ссылок, но не подумала, что можно вот так проще с помощью плагина, а уже представила, как это ужасно долго и муторно делать вручную…

    • Максим Зайцев От автора

      Вика, привет. Ручками — это очень долго и не наш подход. Лучше использовать средства автоматизации. Успехов тебе с заменой!

  • Людмила

    Максим, спасибо за своевременную подсказку. Тоже уже ознакомилась с материалами по переходу на https. Вот теперь еще и за сервисы придется платить ежегодно 🙂

    • Максим Зайцев От автора

      Людмила, пожалуйста! 🙂 Да, дополнительная статья расходов добавится. Но, изучая эту тему я понял, что можно и бесплатный сертификат получить. Сейчас разбираюсь с ограничениями. Кстати, на хостинге Бегет можно бесплатный получить и установить прямо из панели админа. А платный стоит дороже самого хостинга. На Спринхосте дешевле, но тоже дороже, чем у сторонних регистраторов. В общем разберусь и опубликую статью с оптимальным решением.

      • Лариса

        Максим! Очень буду ждать статью с бесплатным вариантом серта, а то действительно, по цене получается дороже самого хостинга со всеми 10 доменами и БД… Не окупается это совершенно…

        • Максим Зайцев От автора

          На этой неделе подготовлю статью. А заодно один из сайтов переведу на бесплатный сертификат.

  • Василий

    Полезный материал. Я будут тянуть с переходом до последнего. С Нового года Гугл начнет обращать внимание на сайты с приемом оплаты, поэтому у нас (у кого этого нет) есть еще время подождать.
    Для перехода нужен будет выделенный IP? Где-то я читал об этом. Еще одни расходы…
    В статьях сайта я уже давно подготовился. Нужно еще посмотреть другие файлы для того, чтобы вообще убрать с URL протокол.
    Волнует еще вопрос, а быть как с рекламными сетями? Никто, кто переходил не освещают этот вопрос. У них сайт зарегистрирован по старому протоколу. Как быть непонятно.

  • Василий

    Мой комментарий куда-то затерялся, хотя комментарии к этой статья приходят на почту.
    Пока воздержусь от перехода, так как я на сайте не принимаю оплату. Попробую удалить протокол из URL на сайте, где еще не удалил.
    На Спринхосте написано, что для подключения сертификата нужно иметь выделенный IP адрес, а это еще одна статья расходов.
    Меня волнует такой еще момент, а как быть с рекламными сетями? Сайт у них зарегистрирован с простым протоколом. Как действовать? Я могу обратиться в РСЯ, а в Google невозможно обратиться. Непонятно, что делать.

    • Максим Зайцев От автора

      Вась, привет. Твой комментарий попал на ручную модерацию, а я с ответом затянул, выходной день, расслабился. Выделенный IP нужен, походу, на всех хостингах, у меня есть доступ к 5 разным хостингам и на всех я проверил, нужен сертификат и выделенный IP. Но, вот покупать сертификат у хостинга очень дорого. В то время, как можно купить сертификат на 3 года за 470 рублей, хостинги (спринхост — самый дешёвый из проверенных) предлагает за 790 рублей в год, плюс 150 за выделенный IP. За год — это грабёж, а за 3 года?
      С рекламой я тоже был озадачен, но перепроверил и выяснил, что в Адсенс мы добавляем доменное имя (в подтверждённые сайты), протокол не учитывается, они это учли. Гугл же! В тизерных сетях тоже самое. РСЯ не смотрел, нужен доступ к клиентскому сайту, было не охота просить. Но, уверен и у них тоже это вопрос решён подобным образом.
      Остаются только партнёрские в прятателе ссылок, кто использует, но и там есть хитрость.
      Так, что переведу они из сайтов на бесплатный сертифика, обкатаю схему и поделюсь опытом! А для блога нужно писать в службу поддержки и узнавать, как установить сторонний сертификат. В общем, буду делиться своими продвижениями в этой области.

      • Василий

        Я тоже смотрел, этот вариант, наверное, самый оптимальный. У бесплатного сертификата могут быть проблемы с проверкой. Если переходить, то на надежный вариант.
        Еще пишут, что из-за защищенного протокола может уменьшится доход от рекламы. Почему? Это главный аргумент для меня тянуть с переходом.

        • Максим Зайцев От автора

          Бесплатный поддерживается меньшим количеством браузеров, но это сегодня не проблема, так как в основном пользуются все современными браузерами, а в них есть поддержка бесплатных сертификатов.
          А вот насчёт уменьшения дохода я не слышал, по идее сайт в глазах рекламных сетей и рекламодателей надёжнее должен выглядеть. Надо этот вопрос тоже изучить!

        • Максим Зайцев От автора

          Значит у них тоже в расчёт идёт доменное имя, протокол не учитывают. Я перепроверил, такой подход во всех рекламных сетях, где я регистрировался сам или регистрировал клиентов. С рекламой проблем не должно быть.

  • Людмила

    Друзья, в общем то не стоит вдаваться в панику и в спешке поголовно переводить все блоги на https. Санкции от гугла будут не для всех и не конкретно с 1 января.
    Сегодня прочитала статью на ideafox , где автор опираясь на первоисточники от гугл сообщает следующее:
    » Для большинства автономных блогов на данный момент “черная метка” НЕ грозит. Если только Вы не владелец форума, интернет-магазина или любого сайта, где необходимо вводить пароли или платежные реквизиты. Причем, большинство интернет-магазинов используют платежные агрегаторы, которые по умолчанию используют SSL-сертификаты.

    Единственная проблема для подобных сайтов – это сквозная форма авторизации на каждой странице. Тут уже придется либо избавляться от нее переходя на оформление заказов без регистрации, либо переходить на HTTPS.»

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

    • Максим Зайцев От автора

      Людмила, всё верно, здесь нас никто не заставляет. И каждый постепенно сможет перейти на новый протокол. Если вообще решит это делать. Но, знать и уметь это нужно.

  • Сергей Стеклов

    В дальнейшем тоже планирую переехать на https. Как бы его не ругали, но все же, это полезная вещь. Тем более есть хорошая кампания летценскрипт, которая раздает бесплатные и надежные сертификаты именно для проверки домена. Проблем с ней не будет. Они могут возникнуть только в самоподписных сертификатах + в некоторых ненадежных кампаниях.
    Также для бесплатного и надежного сертификата выделенный ip не обязателен. Поэтому тут вообще, нет никаких расходов.
    А вот на счет Спринтхоста — я в них разочарован. Цены завышенные + нельзя установить сертификат, которого нет в ихнем магазине. Надеюсь, в дальнейшем они одумаются и пойдут на встречу своим клиентам.

    • Максим Зайцев От автора

      Сергей, привет. Спасибо за комментарий. Я сегодня тоже получил ответ от поддержки Спринхоста и тоже разочарован. Выходит, что мой блог если и переводить на https, то только по их тарифам, а это в 3 раза дороже. Написал им ответное письмо с предложением пересмотреть такое положение дел. Вряд ли они послушают, но если люди будут подобные предложения выдвигать им придётся подумать над этим вопросом.

      • Василий

        Я тоже со Спринхостом поругался. В итоге они мне написали: «В настоящий момент отсутствует техническая возможность установки любых сертификатов в рамках услуги виртуального хостинга.
        В дальнейшем, возможно, появится такая возможность, о чем мы дадим знать нашим клиентам, но сейчас Вы можете использовать сторонние сертификаты только в рамках услуги VDS без администрирования.»
        В принципе, я и не собираюсь в ближайшее время переходить, только. если поисковики начнут вынуждать. Может и хостинг к тому времени исправится.
        По рекламе, как я понял все будет работать. Из за границы тоже написали, что ничего делать не надо.

        • Максим Зайцев От автора

          Да, хостинг подвёл в этом моменте. Я хотел перевести блог на https и показать на нём пример для посетителей. Конечно хотелось показать оптимальный вариант, а не «обдиралово» от хостинга. Значит блог подождёт до лучших времён, пока Спринхост одумается. Покажу пример на другом сайте.
          А с рекламой всё будет без проблем.

          • Вика

            Максим, спасибо за статью. Если честно меня Спринхост давно напрягает, бывает сайт недоступен, правда после покупки выделенного IP все вроде бы нормализовалось. Зато сейчас напрягают эти нюансы с сертификатами. Уже присмотрела себе вроде приличный хостинг, но переходить боюсь.

          • Максим Зайцев От автора

            Вика, добрый вечер. Меня Спринхост устраивает, но вот ситуация с сертификатом конечно не радует. Пока даже не буду дёргаться, так как для моего блога смена протокола не критична. Подожду, возможно они одумаются. Но, если вы решили сменить хостинг, то обратитесь в службу поддержки нового хостинга и они подскажут и помогут перенести к ним сайт. Они в этом заинтересованы.

  • Павел

    Максим привет, спасибо за очередной и важный очерк для развития сайта. У меня два сайта на Спринхосте и один на Бегете, скажу, что на Бегете проблем с бесплатным сертификатом SSL нет и не нужен выделенный ip и это очень радует, что не скажешь про Спринхост, очень хочу остаться на Спринхосте он меня устраивает, хорошо держит нагрузку, но SSL у них проблема, по словам техподдержки бесплатные сертификаты появятся уже в ноябре, но есть ещё один подводный камень, придётся покупать выделенный ip, который стоит 150 руб. в месяц, что сильно меня не радует. Кстати для тех кто перешёл https, могу предоставить код для вставки functions.php решающий проблему смешанного содержимого, исправляющий открытия сайта по двум протоколам https и http одновременно. Максим если тебе интересно, скину ссылку на код, что-бы ты мог его просмотреть, и если посчитаешь нужным передашь его народу.

    • Максим Зайцев От автора

      Паша, привет. Да, Спринхост отстал в этом плане. Когда я с ними переписывались, они ничего не сказали по срокам внедрения бесплатного сертификата. Но, перспектива работы с выделенным ip немного омрачает картину. Скинь конечно ссылку на код, можешь прямо в комментариях, уверен многим посетителям будет интересно.

  • Павел

    Максим приветствую, ссылка на код https://yadi.sk/i/LMDa1OB1y9yBg автор кода Андрей Морковин.

  • Валерий

    Сегодня перевел сайт на https мой хостер макхост сам мне предложил цена вопроса 1000рублей на год, выделенный IP не нужен. Но вот что бы все отображалось правильно не могу настроить.

    • Максим Зайцев От автора

      Валерий, у вас по прежнему к стилям, скриптам и даже к favicon прописан протокол http. В этом вся проблема с отображением сайта. Используйте плагин и смените абсолютные ссылки на относительные. Это поможет.

      • валерий

        Не знаю как все это сделать в базе данных все все http на https поменял и нечего не помогло. Не очень я в этом шарю.

        • Максим Зайцев От автора

          Но, сейчас я уже вижу нормальный сайта, значит помогло! Отлично!

      • валерий

        Вроде все поменял, но а каких скриптах вы говорите? К примеру в скрипте счетчика рамблер тоже нужно менять http на https

        • Максим Зайцев От автора

          Нет, это сторонние скрипты. Вы меняете только в скриптах на вашем сайте, например, библиотеки js в шаблоне и нечто подобное. И обязательно не забудьте про карту сайта и роботс, в них тоже нужно изменить протокол.

          • валерий

            А где эти скрипты в каком файле они могут находится?

          • валерий

            Про карту и робот вы имеете в виду добавить в панель вебмастера Яндекс и Goole? В роботе я изменил адресс и в hetacess добавил код. а в карте что делать?

          • валерий

            Вроде все наконец-то заработало! Благодаря вашей помощи Максим спасибо!

          • Максим Зайцев От автора

            Валера, вы молодец. Всё получилось отлично, поздравляю!

          • Валерий

            Да я уж намучился даже пожалел, что решил это реализовать, думал, все очень просто, но для меня было сложно. Теперь как все с поисковыми системами пройдет.

          • Максим Зайцев От автора

            Но, уже сделали. Яндекс ТИЦ срежет до 0, но восстановит его при следующем апдейте. Гугл на это нормально реагирует.

  • Дмитрий

    Спасибо за обзор этого вопроса. Я вот только одного не пойму — почему нельзя сразу в БД сделать пути к ссылкам / картинкам / скрипта по описанному же в статье относительному виду вне зависимости от протокола? То есть меняем все ссылки на формат //site.ru/ и все, захотели потом перевели на https, захотели подождали:)

    • Дмитрий

      Кстати, может кому понадобится код для смены всех ссылок на относительные //, который можно вставить в functions.php. Такой, полукостыльный метод, но лучше мне кажется, чем держать +1 плагин:)

      function removeHomeUrl($url)
      {
          $url_sectors = preg_split('/\//i', $url);
          unset($url_sectors[0]);
          unset($url_sectors[1]);
          unset($url_sectors[2]);
          return '/'.join('/', $url_sectors);
      }
      add_filter('plugins_url', 'removeHomeUrl');
      
      function attachment_image($attrs)
      {
          $url_sectors = preg_split('/\//', $attrs['src']);
          unset($url_sectors[0]);
          unset($url_sectors[1]);
          unset($url_sectors[2]);
          $attrs['src'] = '/'.join('/', $url_sectors);
          return $attrs;
      }
      
      add_filter('wp_get_attachment_image_attributes', 'attachment_image');
      • Максим Зайцев От автора

        Дмитрий, спасибо за код! Уверен, пригодится многим мои читателям. Удачи вам!

    • Максим Зайцев От автора

      Дмитрий, добрый вечер. Можно конечно сменить ссылки, даже если не будете менять протокол. А в будущем, при смене протокола, пригодится!