Module: Helios::Seo::TagsHelper

Defined in:
app/helpers/helios/seo/tags_helper.rb

Overview

The single source of truth for a content page's machine layer. Renders title, description, canonical, robots, Open Graph, Twitter card, and exactly one JSON-LD block. Supersedes any ad-hoc content_for :head markup so social/OG tags are never emitted twice.

Instance Method Summary collapse

Instance Method Details

#helios_seo_tags(resource, config: Helios::Seo.configuration, title: true) ⇒ Object

Usage (in a layout or view ):

<%= helios_seo_tags(@post) %>

Pass title: false when the surrounding layout already renders its own

element, to avoid emitting two of them. </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46</pre> </td> <td> <pre class="code"><span class="info file"># File 'app/helpers/helios/seo/tags_helper.rb', line 13</span> <span class='kw'>def</span> <span class='id identifier rubyid_helios_seo_tags'>helios_seo_tags</span><span class='lparen'>(</span><span class='id identifier rubyid_resource'>resource</span><span class='comma'>,</span> <span class='label'>config:</span> <span class='const'><span class='object_link'><a href="../../Helios.html" title="Helios (module)">Helios</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Seo.html" title="Helios::Seo (module)">Seo</a></span></span><span class='period'>.</span><span class='id identifier rubyid_configuration'><span class='object_link'><a href="../Seo.html#configuration-class_method" title="Helios::Seo.configuration (method)">configuration</a></span></span><span class='comma'>,</span> <span class='label'>title:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='id identifier rubyid_presenter'>presenter</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="ResourcePresenter.html" title="Helios::Seo::ResourcePresenter (class)">ResourcePresenter</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="ResourcePresenter.html#initialize-instance_method" title="Helios::Seo::ResourcePresenter#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_resource'>resource</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span><span class='comma'>,</span> <span class='label'>view:</span> <span class='kw'>self</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='comment'># Core </span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_tag'>tag</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='lparen'>(</span><span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_document_title'>document_title</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_title'>title</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>description</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_description'>description</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>keywords</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_keywords'>keywords</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_tag'>tag</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span><span class='lparen'>(</span><span class='label'>rel:</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>canonical</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='label'>href:</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_canonical_url'>canonical_url</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>robots</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_robots'>robots</span><span class='rparen'>)</span> <span class='comment'># Open Graph </span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>og:title</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_headline'>headline</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>og:type</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>article</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>og:url</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_canonical_url'>canonical_url</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>og:description</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_description'>description</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>og:image</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_image_url'>image_url</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>og:site_name</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_site_name'>site_name</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>article:published_time</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_published_time'>published_time</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_property'>meta_property</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>article:modified_time</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_modified_time'>modified_time</span><span class='rparen'>)</span> <span class='comment'># Twitter / X </span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>twitter:card</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>summary_large_image</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>twitter:title</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_headline'>headline</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>twitter:description</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_description'>description</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>twitter:image</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_presenter'>presenter</span><span class='period'>.</span><span class='id identifier rubyid_image_url'>image_url</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>twitter:site</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_twitter_site'>twitter_site</span><span class='rparen'>)</span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_meta_named'>meta_named</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>twitter:creator</span><span class='tstring_end'>"</span></span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_twitter_creator'>twitter_creator</span><span class='rparen'>)</span> <span class='comment'># JSON-LD (exactly one block) </span> <span class='id identifier rubyid_tags'>tags</span> <span class='op'><<</span> <span class='id identifier rubyid_json_ld_tag'>json_ld_tag</span><span class='lparen'>(</span><span class='id identifier rubyid_resource'>resource</span><span class='comma'>,</span> <span class='id identifier rubyid_config'>config</span><span class='rparen'>)</span> <span class='id identifier rubyid_safe_join'>safe_join</span><span class='lparen'>(</span><span class='id identifier rubyid_tags'>tags</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>\n</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> </div> <div id="footer"> Generated on Thu Jul 30 14:00:31 2026 by <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a> 0.9.45 (ruby-4.0.2). </div> </div> </body> </html>