Пятница, 22 января 2021 04:38

SEO Ruby on Rails

Оцените материал
(3 голосов)

И сразу оговорюсь: термин SEO (англ. Search Engine Optimization) - автор, не будучи профессиональным сеошником, использует сейчас несколько условно.

Не будем забывать, речь пойдет о CMS, основанной на фреймворке Ruby on Rails, и являющейся в немалой степени концептом; каждый админ способен привнести в него то, что считает необходимым. В том числе те или иные усовершенствования из мира SEO.

OK, это было краткое предисловие, а теперь перейдем к описанию тех свойств Blog on Rails, которые, так или иначе, возможно отнести к области SEO.

 

SEO Ruby on Rails
SEO Ruby on Rails

 

Увидеть на гитхабе.

К сожалению, нет возможности в настоящий момент показать демо.

 

Метатеги. При написании очередного материала вы имеете возможность, см. скриншот, создать description и keywords метатеги, и метатег description при создании категории. Разумеется, все это может быть в любой момент отредактировано либо создано позже; к слову, любую статью блога необходимо привязать к той или иной категории, но вот публиковать ли категорию или нет - дело сугубо ваше, материал будет доступен для чтения в любом случае. Что касается метатега title, он будет сформирован автоматически, по принципу <Имя блога> | <Название статьи>, причем имя блога единожды определено в application.html.erb:

 

# app/views/layouts/application.html.erb

<head>
  <%= display_meta_tags site: 'My Blog on Rails' %>
</head>

 

Так происходит для всех страниц статей и страниц категорий, на других динамически формируемых страницах (странички тегов, например) title и description (keywords в данном случае без надобности, но, при желании, возможно включить и его) окажутся сформированы исходя из метода, доступного для редактирования в application_controller.rb:

 

# app/controllers/application_controller.rb

def metatags
  set_meta_tags title: 'Building a Blog with Ruby on Rails',
  description: 'Your Guide To Content Management System For Ruby on Rails'
end

 

Собственно говоря, достаточно определить в том или ином контроллере @page_title и @page_description (например), чтобы тут же получить эти метатеги на страничке, при этом вносить изменения в HTML не потребуется... это и есть, так сказать, магия Ruby on Rails.

Доступны для использования, например, следующие методы:

 

<% title 'Member Login' %>
<% description 'Member login page.' %>
<% keywords 'Site, Login, Members' %>
<% nofollow %>
<% noindex %>
<% refresh 3 %>

 

, но не только; вы можете использовать, например, :canonical, :og (Open Graph), :twitter и другие. Подробнее на страничке kpumuk/meta-tags.

Sitemap, карта сайта. Чтобы сформировать в директории public архив sitemap.xml.gz (или обновить, ввиду публикации нового контента), достаточно запустить в консоли эту команду:

 

rails sitemap:refresh

 

При этом Google и Bing будут уведомлены о доступности новой карты сайта. Возможно и добавление в ping иных поисковых систем, подробнее см. описание gem 'sitemap_generator', использованного для реализации sitemap блога. Возможен, разумеется, и автоматический, из крона запуск по расписанию обновления карты сайта; при использовании Whenever синтаксис способен выглядеть совсем несложно:

 

# config/schedule.rb

every 1.day, :at => '5:00 am' do
  rake "-s sitemap:refresh"
end

 

Помимо динамически созданных страниц, включаем в карту сайта и пару статических:

 

# config/sitemap.rb
SitemapGenerator::Sitemap.default_host = ENV['DOMAIN_NAME']

SitemapGenerator::Sitemap.create do
  Post.find_each do |content|
    add post_path(content), :lastmod => content.updated_at
  end
  add analytics_path, :priority => 0.5, :changefreq => 'weekly'
  add contacts_path, :priority => 0.5, :changefreq => 'weekly'
end

 

Путь к карте сайта прописан в robots.txt, не забудьте изменить название домена:

 

# public/robots.txt

User-agent: *
Disallow:

Sitemap: http://mstp.herokuapp.com/sitemap.xml.gz

 

Тегирование. При формировании или редактировании материала вы имеете возможность указать (снова см. скриншот) теги, через запятую. Как и положено тегам, они появятся в нижней части статьи, представляя собой линки на динамически формируемую страницу, содержащую перечень статей, объединенных данным тегом; цифра в скобках (e.g. (5)) обозначает счетчик. Подробнее.

SEO-Friendly URLs, дружелюбные / человекопонятные адреса ЧПУ страниц. Url страницы формируется исходя из заголовка, кириллица при этом автоматически транслитерируется в латиницу. Это касается статей и категорий.

RSS. Blog on Rails автоматически формирует валидную RSS-ленту, доступную (иконка bootstrap 4) на всех страницах сайта. Несколько портят впечатление длинные коды изображений, сохраненных в base64. Дело в том, что данная CMS изначально ориентирована на хостинг (облачная PaaS-платформа) Heroku, с его хитроумной виртуальной файловой системой, потому и base64. Не представляет большой сложности, к слову, при работе в используемом редакторе - Quill Editor - сохранение изображений классическим способом, кому оно надо - велкам на страничку джема за инструкциями по установке ImageUploader plugin. Но, возможно, вы удовлетворитесь уже реализованной возможностью альтернативной загрузки изображений на сервера Amazon S3 ? Подробнее в этом материале.

 

Плюс вкусная возможность, потратив совсем небольшое количество усилий - бесплатно пользоваться всем перечисленным на облачной PaaS-платформе хостинга Heroku неограниченное время; американцы предоставляют полностью Free тарифный план всем желающим, причем мне почему-то кажется, что скудных их лимитов с лихвой и за глаза хватит абсолютному большинству наших блогеров. Совсем неплохо ведь для начала, а? Подробнее о том, как сделать деплой на Heroku.

 

Измените xml.title, xml.description и xml.tag! на свои:

 

# app/views/feeds/rss.rss.builder

xml.instruct!
xml.rss version: '2.0', 'xmlns:atom' => 'http://www.w3.org/2005/Atom' do
  xml.channel do
    xml.title 'Blog on Rails'
    xml.description 'CRUD Blog on Rails. Geo-Targeted Banner Ads. Visitor analytics. Tags.'
    xml.link root_url
    xml.language 'ru-ru'
    xml.tag! 'atom:link', rel: 'self', type: 'application/rss+xml', href: 'https://mstp.herokuapp.com/feed.rss'

    @posts.each do |post|
      xml.item do
        xml.title post.title
        xml.link post_url(post)
        xml.pubDate(post.created_at.rfc2822)
        xml.guid post_url(post)
        xml.description(h(post.text))
      end
    end
  end
end

 

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

 

# config/initializers/kaminari_config.rb

Kaminari.configure do |config|
  config.default_per_page = 5
  # config.max_per_page = nil
  # config.window = 4
  # config.outer_window = 0
  # config.left = 0
  # config.right = 0
  # config.page_method_name = :page
  # config.param_name = :page
  # config.max_pages = nil
  # config.params_on_first_page = false
end

 
Последнее изменениеЧетверг, 29 февраля 2024 20:13

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

Добавьте ваш комментарий

Text To Speech

Комментарии в блоге

  • Aleksej Yes. You can see it, I switched the temperature from C to F in the module on this page (Costa… 2024-10-01 21:43:42
    jWeather by ip. Погода по ip для Joomla!
  • Anne Is it possible to change temperature to F vs C? 2024-10-01 18:55:58
    jWeather by ip. Погода по ip для Joomla!
  • Aleksej Первое, что бросается в глаза: период времени, прошедший между тем, как автор комментария разбросал аналогичный текст по нескольким интернет-площадкам рунета,… 2024-07-02 14:10:05
    Tobeamerica эмансипе
  • Валерий Л. Предыдущий отзыв неактуален. Это было недоразумение, мы его уладили. Компания вернула мне деньги, никаких претензий к ней я не имею.… 2024-07-01 17:10:43
    Tobeamerica эмансипе
  • Евгения Кличко Спасибо. 2024-06-25 01:03:32
    Joomla cache. Problems and solutions

Заказать сайт

Веб-разработка. Заказать сайт

Вы можете заказать сайт-визитку, блог, корпоративный сайт, интернет-магазин или коммерческий web-портал.