<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>partials on
A Scripter's Notes</title><link>https://scripter.co/tags/partials/</link><description>Recent content in partials
on A Scripter's Notes</description><language>en-us</language><managingEditor>kaushal.modi@gmail.com (Kaushal Modi)</managingEditor><webMaster>kaushal.modi@gmail.com (Kaushal Modi)</webMaster><lastBuildDate>Wed, 22 Apr 2026 08:24:58 -0400</lastBuildDate><generator>Hugo -- gohugo.io</generator><docs>https://validator.w3.org/feed/docs/rss2.html</docs><atom:link href="https://scripter.co/tags/partials/index.xml" rel="self" type="application/rss+xml"/><item><title>Parsing Backlinks in Hugo</title><link>https://scripter.co/parsing-backlinks-in-hugo/</link><description>&lt;blockquote>A Hugo partial to parse all the &lt;em>backlinks&lt;/em> to any post from the same
Hugo-generated website.&lt;/blockquote>&lt;div class="ox-hugo-toc toc">
&lt;div class="heading">Table of Contents&lt;/div>
&lt;ul>
&lt;li>&lt;a href="#code">Code&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#create-a-backlinks-dot-html-partial">&lt;span class="section-num">1&lt;/span> Create a &lt;code>backlinks.html&lt;/code> &lt;em>partial&lt;/em>&lt;/a>&lt;/li>
&lt;li>&lt;a href="#use-the-partial">&lt;span class="section-num">2&lt;/span> Use the partial&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#features-and-improvements">Features and Improvements&lt;/a>&lt;/li>
&lt;li>&lt;a href="#closing">Closing&lt;/a>&lt;/li>
&lt;/ul>
&lt;/div>
&lt;!--endtoc-->
&lt;p>If a post is referred to in other posts, then all those posts are
creating &lt;em>backlinks&lt;/em> to that first post.&lt;/p>
&lt;p>As of writing this (&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2022-04-19 Tue&amp;gt;&lt;/span>&lt;/span>), Hugo doesn&amp;rsquo;t have a built-in
way to generate a list of such backlinks, though there&amp;rsquo;s an open issue
(&lt;a href="https://github.com/gohugoio/hugo/issues/8077"># 8077&lt;/a>) to track this feature request.&lt;/p>
&lt;p>One way to gather a list of backlinks to a post is to find out that
post&amp;rsquo;s relative or absolute &lt;em>permalink&lt;/em>, and search for the
occurrences of that link in all the other posts on the published
site. The author of &lt;a href="https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/">seds.nl: Export org-roam backlinks with Gohugo&lt;/a>,
Ben Mezger, uses this approach in his solution for creating backlinks
in that post.&lt;/p>
&lt;p>In this post, I am expanding upon that solution and refactoring it bit
to fit my needs.&lt;/p>
&lt;h2 id="code">Code&amp;nbsp;&lt;a class="headline-hash no-text-decoration" href="#code">#&lt;/a>&lt;/h2>
&lt;p>Without further ado, here is my version of the &lt;em>partial&lt;/em>:&lt;/p>
&lt;h3 id="create-a-backlinks-dot-html-partial">&lt;span class="section-num">1&lt;/span> Create a &lt;code>backlinks.html&lt;/code> &lt;em>partial&lt;/em>&amp;nbsp;&lt;a class="headline-hash no-text-decoration" href="#create-a-backlinks-dot-html-partial">#&lt;/a>&lt;/h3>
&lt;p>Save this partial to your site repo as
&lt;code>layouts/partials/backlinks.html&lt;/code>.&lt;/p>
&lt;p>&lt;a id="code-snippet--backlinks-partial">&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt" id="org-coderef--e7ca1c-1">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-1"> 1&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-2">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-2"> 2&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-3">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-3"> 3&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-4">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-4"> 4&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-5">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-5"> 5&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-6">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-6"> 6&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-7">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-7"> 7&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-8">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-8"> 8&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-9">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-9"> 9&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-10">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-10">10&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-11">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-11">11&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-12">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-12">12&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-13">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-13">13&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-14">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-14">14&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-15">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-15">15&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-16">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-16">16&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-17">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-17">17&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-18">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-18">18&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-19">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-19">19&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-20">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-20">20&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-21">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-21">21&lt;/a>
&lt;/span>&lt;span class="lnt" id="org-coderef--e7ca1c-22">&lt;a style="outline: none; text-decoration:none; color:inherit" href="#org-coderef--e7ca1c-22">22&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-go-html-template" data-lang="go-html-template">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$backlinks&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">:=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">slice&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$path_base&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">:=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.page.File.ContentBaseName&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$path_base_re&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">:=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">printf&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">`[&amp;#34;/(]%s[&amp;#34;/)]`&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$path_base&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">range&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">where&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">site&lt;/span>&lt;span class="na">.RegularPages&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;RelPermalink&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;ne&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.page.RelPermalink&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nx">findRE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$path_base_re&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.RawContent&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">1&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$backlinks&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$backlinks&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">append&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">end&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">end&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">with&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$backlinks&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">section&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;backlinks&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">printf&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;%s&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="na">$.heading&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">default&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;&amp;lt;h2&amp;gt;Backlinks&amp;lt;/h2&amp;gt;&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">safeHTML&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">nav&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">ul&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">range&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">li&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.RelPermalink&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.Title&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">a&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">li&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">end&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">ul&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">nav&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">section&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">end&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="src-block-caption">
&lt;span class="src-block-number">&lt;a href="#code-snippet--backlinks-partial">Code Snippet 1&lt;/a>:&lt;/span>
&lt;code>backlinks.html&lt;/code> Hugo partial
&lt;/div>
&lt;h3 id="use-the-partial">&lt;span class="section-num">2&lt;/span> Use the partial&amp;nbsp;&lt;a class="headline-hash no-text-decoration" href="#use-the-partial">#&lt;/a>&lt;/h3>
&lt;p>Add a call to this partial in your &amp;ldquo;single&amp;rdquo; layout&amp;rsquo;s template file,
which is typically &lt;code>layouts/_default/single.html&lt;/code>.&lt;/p>
&lt;p>&lt;a id="code-snippet--call-backlinks-partial">&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go-html-template" data-lang="go-html-template">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">partial&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;backlinks.html&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nx">dict&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;page&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="src-block-caption">
&lt;span class="src-block-number">&lt;a href="#code-snippet--call-backlinks-partial">Code Snippet 2&lt;/a>:&lt;/span>
Calling the &lt;code>backlinks.html&lt;/code> partial
&lt;/div>
&lt;h2 id="features-and-improvements">Features and Improvements&amp;nbsp;&lt;a class="headline-hash no-text-decoration" href="#features-and-improvements">#&lt;/a>&lt;/h2>
&lt;ol>
&lt;li>✨ The partial now accepts a &lt;code>dict&lt;/code> or a dictionary with
keys &lt;code>page&lt;/code> and &lt;code>heading&lt;/code>.
&lt;ul>
&lt;li>The &lt;code>page&lt;/code> key is required to pass the page context from where
the partial is called.&lt;/li>
&lt;li>The &lt;code>heading&lt;/code> key is optional. This can be used by the user to
set the &amp;ldquo;Backlinks&amp;rdquo; heading differently. For example,
&lt;code class="code-inline language-go-html-template">&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">partial&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;backlinks.html&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nx">dict&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;page&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;heading&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;&amp;lt;h4&amp;gt;Links to this note&amp;lt;/h4&amp;gt;&amp;#34;&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>🐛 &lt;a href="#org-coderef--e7ca1c-2">Line 2&lt;/a>: &lt;code>.File.BaseFileName&lt;/code> would be
just &amp;ldquo;index&amp;rdquo; for all the &lt;a href="https://scripter.co/hugo-leaf-and-branch-bundles/">&lt;em>Leaf Bundles&lt;/em>&lt;/a>
&lt;span class="sidenote-number">&lt;small class="sidenote">
If you follow this link and scroll to the bottom of that page, you
will see a &amp;ldquo;Backlinks&amp;rdquo; section auto-generated with the help of this
partial. This post will be linked there because I just referenced
that post here.
&lt;/small>&lt;/span>
, and I use them &lt;strong>heavily&lt;/strong>! Using &lt;code>.File.ContentBaseName&lt;/code> fixes
this problem. See &lt;a href="https://gohugo.io/variables/files/">📖 Hugo File Variables&lt;/a> for more
info. [Credit: &lt;a href="https://github.com/benmezger/blog/issues/8#issuecomment-894750079">&lt;em>@sjgknight&lt;/em>&lt;/a>]&lt;/li>
&lt;li>🐛 &lt;a href="#org-coderef--e7ca1c-3">Line 3&lt;/a>: Reduce false matches for
backlinks by making the regular expression a bit stricter. Now it
will match only if the derived &lt;code>$path_base&lt;/code> variable is found
wrapped in characters like &lt;strong>&lt;code>&amp;quot;&lt;/code>&lt;/strong>, &lt;strong>&lt;code>/&lt;/code>&lt;/strong>, &lt;strong>&lt;code>(&lt;/code>&lt;/strong> or &lt;strong>&lt;code>)&lt;/code>&lt;/strong>.
&lt;ul>
&lt;li>If &lt;code>$path_base&lt;/code> is &amp;lsquo;hello&amp;rsquo;, I don&amp;rsquo;t want its mere reference like
in this line to create a backlink on that &amp;lsquo;hello&amp;rsquo; post!&lt;/li>
&lt;li>Instead, a match will happen only if something like &lt;strong>&lt;code>&amp;quot;hello&amp;quot;&lt;/code>&lt;/strong>
(as in &lt;code class="code-inline language-go-html-template">&lt;span class="cp">{{&lt;/span>&lt;span class="err">&amp;lt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">relref&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;hello&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">&amp;gt;&lt;/span>&lt;span class="cp">}}&lt;/span>&lt;/code>), or &lt;strong>&lt;code>/hello&amp;quot;&lt;/code>&lt;/strong> (as in &lt;code class="code-inline language-go-html-template">&lt;span class="cp">{{&lt;/span>&lt;span class="err">&amp;lt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">relref&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;/posts/hello&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">&amp;gt;&lt;/span>&lt;span class="cp">}}&lt;/span>&lt;/code>), or &lt;strong>&lt;code>/hello)&lt;/code>&lt;/strong> (as in
&lt;code class="code-inline language-md">[&lt;span class="nt">Hello&lt;/span>](&lt;span class="na">/hello&lt;/span>)&lt;/code>) is found in the raw
Markdown content (&lt;code>.RawContent&lt;/code>).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>⚡ &lt;a href="#org-coderef--e7ca1c-5">Line 5&lt;/a>: Look for backlinks only in
&lt;code>site.RegularPages&lt;/code>. See &lt;a href="https://gohugo.io/variables/site/#sitepages-compared-to-pages">📖 About site Pages variables&lt;/a> for
more info. &lt;code>site.AllPages&lt;/code> includes &lt;strong>all&lt;/strong> pages.. even the list
pages like section and taxonomy pages which, I believe, won&amp;rsquo;t
contain backlinks.&lt;/li>
&lt;li>⚡ The &lt;code>findRE&lt;/code> in &lt;a href="#org-coderef--e7ca1c-6">line 6&lt;/a> is slightly optimized
by quitting the search immediately as soon as the first match is
found.&lt;/li>
&lt;li>💄 Rest of the changes are just using a different style of
coding using Hugo templates and creating a different structure in
HTML.&lt;/li>
&lt;/ol>
&lt;h2 id="closing">Closing&amp;nbsp;&lt;a class="headline-hash no-text-decoration" href="#closing">#&lt;/a>&lt;/h2>
&lt;p>This partial works great for this site &amp;mdash; adds only a few hundred
&lt;em>milliseconds&lt;/em> to the build time.&lt;/p>
&lt;p>But it&amp;rsquo;s not an efficient solution. The partial is called in the
&lt;em>single&lt;/em> template where it searching for backlinks to the current page
in &lt;strong>all&lt;/strong> other regular pages, and the &lt;em>single&lt;/em> template is evaluated
for &lt;strong>all&lt;/strong> the regular pages. So its &lt;a href="https://en.wikipedia.org/wiki/Big_O_notation">\(O\) notation&lt;/a> will be close to
\(O(n^2)\) where \(n\) is the number of regular pages.&lt;/p>
&lt;p>I have only about a hundred regular pages at the moment, but I can see
this partial taking a major chunk of the build time
&lt;span class="sidenote-number">&lt;small class="sidenote">
The &lt;code>hugo --templateMetrics --templateMetricsHints&lt;/code> command prints a
table listing all the partials used in the build and how much time
each of them took. See &lt;a href="https://gohugo.io/troubleshooting/build-performance/">📖 Hugo Build Performance&lt;/a> for more
info.
&lt;/small>&lt;/span>
as the number of pages increase.&lt;/p>
&lt;p>A built-in support for backlinks from Hugo (&lt;a href="https://github.com/gohugoio/hugo/issues/8077"># 8077&lt;/a>) would really help
in this performance department.&lt;/p></description><author>Kaushal.Modi@fakeEmailToMakeValidatorHappy.com (Kaushal Modi)</author><category domain="https://scripter.co/categories/hugo">hugo</category><category domain="https://scripter.co/tags/partials">partials</category><category domain="https://scripter.co/tags/backlinks">backlinks</category><category domain="https://scripter.co/tags/100daystooffload">100DaysToOffload</category><guid>https://scripter.co/parsing-backlinks-in-hugo/</guid><pubDate>Wed, 20 Apr 2022 09:50:00 -0400</pubDate></item></channel></rss>