Articles

Free Links From Cloudflare

Cloudflare is one of the greatest SEO tools out there today—hands down. If you’re only using it for speed enhancements, you’re seriously missing out on everything it can do.

While researching how some free movie sites serve pirated content, I stumbled across a Reddit list of around 50 sites. Most of them got obliterated by DMCA takedowns, but what stood out was the handful still standing. They were hosted using Cloudflare Workers and Pages, essentially running full sites off Cloudflare-owned subdomains.

Some of these URLs were still ranking in Google search results.

That means Google is fine indexing them, which opens up interesting SEO possibilities. Granted, generating a ton of CF subdomains or Workers linking to your main site might not pack the same SEO punch as traditional backlinks, but the fact that they’re indexed? That’s an untapped angle, especially compared to how overrun and devalued Web 2.0 blogs have become in the SEO game.

The Power of Cloudflare Workers

CF Workers are edge functions operating on Cloudflare’s global CDN, making them ridiculously fast. But it gets better:

  • Cloudflare also offers a free database you can use to power an entire CMS.
  • This means you can build and “host” applications directly on the edge—no server required.

I’ve used Cloudflare in the past for some clever hacks, like ditching MaxMind for geo-detection. With Cloudflare rules, you can serve geo-specific content (like JS files) that tweak the user interface based on location. It’s relly powerful on so many levels.

Cloudflare’s security capabilities are a whole other universe worth exploring. But for now, here’s a proof of concept script I wrote to pull a list of links from my blog feed. Feel free to use it—or tweak it. Remember: don’t happy, be worry.

[code]

addEventListener(“fetch”, event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const feedUrl = ‘https://kadabra.co.za/feed/’
const randomImageNumber = Math.floor(Math.random() * 70) + 1
const backgroundImageUrl = `https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp`
try {
const response = await fetch(feedUrl)
const xml = await response.text()
let items = xml.match(/(.*?)<\/item>/gs) || []
let content = `


Latest Posts from kadabra.co.za




Latest News from kadabra.co.za

Stay up to date with the latest news and updates from Kadabra.

    `
    items.forEach((item, index) => {
    if (index < 10) { // Limit to 10 posts const titleMatch = item.match(/<!\[CDATA\[(.*?)\]\]><\/title>/) || item.match(/<title>(.*?)<\/title>/)<br /> const linkMatch = item.match(/<link>(.*?)<\/link>/)<br /> const title = titleMatch ? titleMatch[1] : ‘No title available’<br /> const link = linkMatch ? linkMatch[1] : ‘#’<br /> content += `</p> <li><a href="${link}" rel="dofollow">${title}</a></li> <p>`<br /> }<br /> })<br /> content += ` </ul> </p></div> <p> </body><br /> </html>`<br /> return new Response(content, {<br /> headers: { ‘content-type’: ‘text/html’ }<br /> })<br /> } catch (error) {<br /> return new Response(‘Error fetching feed’, {<br /> status: 500,<br /> headers: { ‘content-type’: ‘text/plain’ }<br /> })<br /> }<br /> }</p> <p>[/code]</p> <p>Here’s a step-by-step guide to deploy this script as a Cloudflare Worker:</p> <hr /> <h3><strong>Step 1: Sign in to Cloudflare</strong></h3> <ol> <li>Go to the <a target="_new" rel="noopener">Cloudflare dashboard</a> and log in to your account.</li> <li>If you don’t already have an account, sign up—it’s free for basic usage.</li> </ol> <hr /> <h3><strong>Step 2: Create a New Worker</strong></h3> <ol> <li>From the dashboard, click on <strong>“Workers”</strong> in the navigation panel.</li> <li>Select <strong>“Create a Service”</strong> and give your Worker a name (e.g., <code>kadabra-feed-display</code>).</li> <li>Choose <strong>“HTTP handler”</strong> as the type of Worker and proceed.</li> </ol> <h3><strong>Step 3: Add Your Script</strong></h3> <ol> <li>Once the Worker is created, you’ll be taken to the script editor.</li> <li>Replace the default code with your script:</li> </ol> <p>Here’s what it looks like <a href="https://kadabra.hedgefund-co-za.workers.dev/">live</a> and here’s another <a href="https://bet.nomnom-4a1.workers.dev/">one</a> please feel free to switch out your own images and URLS if you use this code.</p> <section class="pr-related-rail" aria-label="Related posts"> <h3 class="pr-related-rail__heading">More like this</h3> <div class="pr-related-rail__track" role="list"> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/immanuel-kant-and-ai-what-we-can-know-what-we-should-do-and-what-we-may-hope/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="272" src="https://www.kadabra.co.za/wp-content/uploads/kai.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/kai.webp 1344w, https://www.kadabra.co.za/wp-content/uploads/kai-300x170.webp 300w, https://www.kadabra.co.za/wp-content/uploads/kai-1024x581.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/kai-150x85.webp 150w, https://www.kadabra.co.za/wp-content/uploads/kai-768x435.webp 768w, https://www.kadabra.co.za/wp-content/uploads/kai-650x369.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Dougg Agent · March 4, 2026 </div> <h4 class="pr-related-card__title">Immanuel Kant and AI: What We Can Know, What We Should Do, and What We May Hope</h4> <p class="pr-related-card__excerpt">Learning AI with Kant: What We Can Know, What We Should Do, and What…</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/seo-is-dead-aseo-new-and-improved-ai-is-here-yadda-yadda-yadda/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="320" src="https://www.kadabra.co.za/wp-content/uploads/seo-dead.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/seo-dead.webp 1000w, https://www.kadabra.co.za/wp-content/uploads/seo-dead-300x200.webp 300w, https://www.kadabra.co.za/wp-content/uploads/seo-dead-150x100.webp 150w, https://www.kadabra.co.za/wp-content/uploads/seo-dead-768x512.webp 768w, https://www.kadabra.co.za/wp-content/uploads/seo-dead-650x434.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · June 17, 2025 </div> <h4 class="pr-related-card__title">How AI Hype Fuels the Latest Wave of Digital Marketing Scams</h4> <p class="pr-related-card__excerpt">Grifters are using AI buzzwords, fake automation, and recycled marketing tools to lure business owners with promises of instant results.</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/openclaw-memory-systems-that-dont-forget/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="270" src="https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory.webp 1600w, https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory-300x169.webp 300w, https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory-1024x576.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory-150x84.webp 150w, https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory-768x432.webp 768w, https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory-1536x864.webp 1536w, https://www.kadabra.co.za/wp-content/uploads/electric-brain-openclaw-memory-650x366.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Dougg Agent · March 4, 2026 </div> <h4 class="pr-related-card__title">OpenClaw Memory Systems That Don’t Forget</h4> <p class="pr-related-card__excerpt">When an agent forgets something important, people blame the model. In production, the root…</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/allow-svg-file-uploads-wordpress-using-code-snippets/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="270" src="https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-300x169.webp 300w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-150x85.webp 150w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-768x433.webp 768w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-650x366.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · June 8, 2024 </div> <h4 class="pr-related-card__title">Safe SVG File Uploads in Wordpress</h4> <p class="pr-related-card__excerpt">Wrangle those SVGs, cowboy! Upload 'em like a pro with this code snippet. Fix errors, set dimensions, and ride into the sunset with a faster website. Yeehaw! 🤠</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/were-not-drowning-in-content-were-starving-for-creators/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="274" src="https://www.kadabra.co.za/wp-content/uploads/shirt.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/shirt.webp 1192w, https://www.kadabra.co.za/wp-content/uploads/shirt-300x171.webp 300w, https://www.kadabra.co.za/wp-content/uploads/shirt-1024x585.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/shirt-150x86.webp 150w, https://www.kadabra.co.za/wp-content/uploads/shirt-768x439.webp 768w, https://www.kadabra.co.za/wp-content/uploads/shirt-650x371.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · December 10, 2024 </div> <h4 class="pr-related-card__title">The Myth of Content Saturation: Why the Internet Needs Your Voice</h4> <p class="pr-related-card__excerpt">Think the internet is oversaturated with content? Think again. With 96% of people consuming and only 4% creating, we’re in a creator drought.</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/marketing-your-business-through-articles/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="269" src="https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging.webp 1456w, https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging-300x168.webp 300w, https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging-1024x574.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging-150x84.webp 150w, https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging-768x430.webp 768w, https://www.kadabra.co.za/wp-content/uploads/ai-killed-blogging-650x364.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · August 2, 2025 </div> <h4 class="pr-related-card__title">AI Killed the Blog Star</h4> <p class="pr-related-card__excerpt">Content marketing, once the darling of digital strategy, is facing an existential crisis in…</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/seo-sucks-without-a-well-tamed-python/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="303" src="https://www.kadabra.co.za/wp-content/uploads/python.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/python.webp 1000w, https://www.kadabra.co.za/wp-content/uploads/python-300x190.webp 300w, https://www.kadabra.co.za/wp-content/uploads/python-150x95.webp 150w, https://www.kadabra.co.za/wp-content/uploads/python-768x485.webp 768w, https://www.kadabra.co.za/wp-content/uploads/python-650x411.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · June 21, 2024 </div> <h4 class="pr-related-card__title">SEO Sucks Without a Well Tamed Python</h4> <p class="pr-related-card__excerpt">Python is a powerful tool for automating tasks, analyzing data, and providing deep insights for SEO professionals. It enables efficient web scraping for competitor analysis, detailed keyword analysis and optimization</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/kill-wordpress-unused-css-and-compress-html-with-code-snippets/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="270" src="https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-300x169.webp 300w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-150x85.webp 150w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-768x433.webp 768w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-650x366.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · June 8, 2024 </div> <h4 class="pr-related-card__title">Fuck Gutenberg Render-Blocking Unused CSS</h4> <p class="pr-related-card__excerpt">Compress your page HTML output and kill wordpress default crap to get perfect Page Speed Scores</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/replace-yoast-with-a-simple-code-snippet/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="270" src="https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/code-snippet.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-300x169.webp 300w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-150x85.webp 150w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-768x433.webp 768w, https://www.kadabra.co.za/wp-content/uploads/code-snippet-650x366.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · June 8, 2024 </div> <h4 class="pr-related-card__title">YOAST Replacement Using Free Code Snippets</h4> <p class="pr-related-card__excerpt">Custom SEO Meta descriptions. I took it upon myself to remove yoast and simply have a code snippet to contain the basic display of meta data.</p> </div> </a> </article> <article class="pr-related-card" role="listitem"> <a href="https://www.kadabra.co.za/the-best-css-compressor/" class="pr-related-card__link"> <div class="pr-related-card__media"> <img width="480" height="276" src="https://www.kadabra.co.za/wp-content/uploads/compress-css-1.webp" class="pr-related-card__image wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://www.kadabra.co.za/wp-content/uploads/compress-css-1.webp 1029w, https://www.kadabra.co.za/wp-content/uploads/compress-css-1-300x172.webp 300w, https://www.kadabra.co.za/wp-content/uploads/compress-css-1-1024x588.webp 1024w, https://www.kadabra.co.za/wp-content/uploads/compress-css-1-150x86.webp 150w, https://www.kadabra.co.za/wp-content/uploads/compress-css-1-768x441.webp 768w, https://www.kadabra.co.za/wp-content/uploads/compress-css-1-650x373.webp 650w" sizes="auto, (max-width: 480px) 100vw, 480px" /> </div> <div class="pr-related-card__body"> <div class="pr-related-card__meta"> By Kadabra · February 6, 2025 </div> <h4 class="pr-related-card__title">The Best CSS Compressor For Moderate Readable Compression</h4> <p class="pr-related-card__excerpt">Moderate CSS compression strikes the perfect balance between readability and performance.</p> </div> </a> </article> </div> </section> </div> <aside class="share" aria-label="Share"> <span class="share__label">Share</span> <a class="share__btn share__btn--x" href="https://twitter.com/intent/tweet?text=Free%20Links%20From%20Cloudflare&url=https%3A%2F%2Fwww.kadabra.co.za%2Ffree-links-from-cloudflare%2F" target="_blank" rel="noopener" aria-label="Share on X"> <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M17.7 3H21l-7.4 8.4L22 21h-6.6l-5.2-6.6L4.3 21H1l7.9-9L1.6 3h6.8l4.7 6Zm-2.3 16h2L7 5H4.9l10.5 14Z"/></svg> </a> <a class="share__btn share__btn--fb" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.kadabra.co.za%2Ffree-links-from-cloudflare%2F" target="_blank" rel="noopener" aria-label="Share on Facebook"> <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M22 12a10 10 0 1 0-11.6 9.9V15h-2.5v-3h2.5V9.7c0-2.4 1.4-3.8 3.7-3.8 1.1 0 2.2.2 2.2.2v2.4h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.7l-.4 3h-2.3v6.9A10 10 0 0 0 22 12Z"/></svg> </a> <a class="share__btn share__btn--in" href="https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.kadabra.co.za%2Ffree-links-from-cloudflare%2F" target="_blank" rel="noopener" aria-label="Share on LinkedIn"> <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M20.5 2h-17A1.5 1.5 0 0 0 2 3.5v17A1.5 1.5 0 0 0 3.5 22h17a1.5 1.5 0 0 0 1.5-1.5v-17A1.5 1.5 0 0 0 20.5 2ZM8 19H5V9h3v10Zm-1.5-11.4a1.7 1.7 0 1 1 1.7-1.7 1.7 1.7 0 0 1-1.7 1.7ZM19 19h-3v-5.5c0-1.4-.5-2.3-1.7-2.3a1.8 1.8 0 0 0-1.7 1.2 2.3 2.3 0 0 0-.1.8V19h-3V9h3v1.3A3 3 0 0 1 15.1 9c2 0 3.4 1.3 3.4 4V19Z"/></svg> </a> <button type="button" class="share__btn share__btn--copy" data-copy-url="https://www.kadabra.co.za/free-links-from-cloudflare/" aria-label="Copy link"> <svg viewBox="0 0 24 24" width="18" height="18" aria-hidden="true"><path fill="currentColor" d="M10 13a5 5 0 0 0 7.1 0l3-3a5 5 0 0 0-7.1-7.1l-1.7 1.7a1 1 0 0 0 1.4 1.4l1.7-1.7a3 3 0 1 1 4.3 4.3l-3 3a3 3 0 0 1-4.3 0 1 1 0 0 0-1.4 1.4ZM14 11a5 5 0 0 0-7.1 0l-3 3a5 5 0 0 0 7.1 7.1l1.7-1.7a1 1 0 0 0-1.4-1.4l-1.7 1.7a3 3 0 1 1-4.3-4.3l3-3a3 3 0 0 1 4.3 0 1 1 0 0 0 1.4-1.4Z"/></svg> </button> </aside> </article> <section class="entry-comments"> <section class="pr-comments" id="comments" aria-labelledby="pr-comments-title"> <header class="pr-comments__head"> <h2 class="pr-comments__title" id="pr-comments-title"> Join the conversation </h2> </header> <div class="pr-comments__composer-wrap"> <form class="pr-comments-form" data-action="https://www.kadabra.co.za/wp-json/kadabra/v1/comment-submit" data-rest-nonce="41630f3f7c" data-post-id="2831" data-challenge="8c0c4ed437f14bdde9939f57e444cbad" data-difficulty="4" novalidate> <input type="hidden" name="pr_ts" value="1783167866" /> <input type="hidden" name="pr_chal" value="8c0c4ed437f14bdde9939f57e444cbad" /> <input type="hidden" name="pr_nonce" value="" /> <input type="hidden" name="parent" value="0" /> <label class="pr-comments-form__hp" aria-hidden="true"> <input type="text" name="pr_hp" tabindex="-1" autocomplete="off" /> </label> <p class="pr-comments-form__prompt">Live conversation — moderated by AI, free to join, no signup</p> <div class="pr-comments-form__reply-to" data-pr-reply-to hidden> Replying to <strong data-pr-reply-name></strong> <button type="button" class="pr-comments-form__reply-clear" aria-label="Cancel reply">×</button> </div> <label class="pr-comments-form__field pr-comments-form__field--body"> <span class="screen-reader-text">Your comment</span> <textarea name="comment" rows="3" required maxlength="6000" placeholder="Add your thoughts…" data-pr-body></textarea> </label> <div class="pr-comments-form__identity" data-pr-identity hidden> <label class="pr-comments-form__field"> <span class="screen-reader-text">Name (optional)</span> <input type="text" name="author" maxlength="80" value="" placeholder="Name (optional)" autocomplete="name" /> </label> <label class="pr-comments-form__field"> <span class="screen-reader-text">Email (optional, kept private)</span> <input type="email" name="email" maxlength="100" value="" placeholder="Email (optional — get reply notifications)" autocomplete="email" data-pr-email /> </label> </div> <div class="pr-comments-form__login-hint" data-pr-login-hint hidden> <span class="pr-comments-form__login-hint-icon" aria-hidden="true">↪</span> <span class="pr-comments-form__login-hint-text"> Looks like you have an account. <button type="button" class="pr-comments-form__login-link" data-pr-magic> Sign in with a magic link </button> </span> </div> <footer class="pr-comments-form__foot"> <p class="pr-comments-form__legal"> Posting publicly. Held briefly for review. We never share your email. </p> <button type="submit" class="pr-comments-form__submit" data-pr-submit> <span data-pr-submit-label>Post comment</span> <span class="pr-comments-form__submit-pow" data-pr-pow hidden> <svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true"><circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="2" stroke-dasharray="14 14"><animateTransform attributeName="transform" type="rotate" from="0 12 12" to="360 12 12" dur=".9s" repeatCount="indefinite"/></circle></svg> </span> </button> </footer> <div class="pr-comments-form__notice" data-pr-notice hidden></div> </form> </div> <ol class="pr-comments__list" data-pr-list> </ol> </section> </section> </main> <footer class="site-footer"> <div class="container site-footer__widgets"> </div> <div class="site-footer__bottom"> <div class="container"> <p class="site-footer__copy">© 2026 Kadabra SEO</p> </div> </div> </footer> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/front-end/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="kadabra-beacon-js" data-c="{"u":"https:\/\/www.kadabra.co.za\/wp-admin\/admin-ajax.php","a":"kadabra_track","p":2831,"c":1,"es":45,"ed":35,"bs":15,"bd":20}" src="https://www.kadabra.co.za/wp-content/plugins/site-toolkit/assets/engagement-beacon.js?ver=0.21.0"></script> <script id="kadabra-deals-js-extra"> var KADABRA_DEALS = {"trackUrl":"https://www.kadabra.co.za/wp-json/kadabra/v1/deal-track","nonce":"41630f3f7c","global":"KADABRA_DEALS"}; //# sourceURL=kadabra-deals-js-extra </script> <script id="kadabra-deals-js" src="https://www.kadabra.co.za/wp-content/plugins/site-toolkit/assets/js/deals.js?ver=0.21.0"></script> <script id="pr-related-rail-js" src="https://www.kadabra.co.za/wp-content/plugins/site-toolkit/assets/js/related-rail.min.js?ver=1781674235"></script> <script id="kadabra-comments-forum-js-extra"> var KADABRA_COMMENTS = {"submitUrl":"https://www.kadabra.co.za/wp-json/kadabra/v1/comment-submit","likeUrl":"https://www.kadabra.co.za/wp-json/kadabra/v1/comment-like","restNonce":"41630f3f7c","postId":"2831","loginCheck":"https://www.kadabra.co.za/wp-json/kadabra/v1/comment-email-check","global":"KADABRA_COMMENTS"}; //# sourceURL=kadabra-comments-forum-js-extra </script> <script id="kadabra-comments-forum-js" src="https://www.kadabra.co.za/wp-content/plugins/site-toolkit/assets/js/comments-forum.min.js?ver=1781674235"></script> <script id="fe-theme-js" src="https://www.kadabra.co.za/wp-content/themes/front-end/assets/js/theme.min.js?ver=1781674261"></script> <script>(function(){var KEY="visitTrail.v1",SID="visitSid.v1",MAX=50; function setCookie(n,v,days){var d=new Date();d.setTime(d.getTime()+days*86400000);document.cookie=n+"="+encodeURIComponent(v)+"; path=/; expires="+d.toUTCString()+"; SameSite=Lax";} function getCookie(n){var a=document.cookie.split("; ");for(var i=0;i<a.length;i++){if(a[i].indexOf(n+"=")===0){return a[i].split("=")[1]||"";}}return"";} function browserName(ua){ua=ua||navigator.userAgent; if(/edg/i.test(ua))return"Edge"; if(/chrome|crios/i.test(ua)&&!/edg|opr/i.test(ua))return"Chrome"; if(/safari/i.test(ua)&&!/chrome|crios|android/i.test(ua))return"Safari"; if(/firefox|fxios/i.test(ua))return"Firefox"; if(/opr|opera/i.test(ua))return"Opera"; if(/brave/i.test(ua))return"Brave"; return"Other";} function nowISO(){return new Date().toISOString();} function loc(){return location.pathname+location.search+location.hash;} function load(){try{return JSON.parse(localStorage.getItem(KEY)||"{}");}catch(e){return{};}} function save(o){localStorage.setItem(KEY,JSON.stringify(o));} var sid=getCookie(SID); if(!sid){sid=Math.random().toString(36).slice(2)+Date.now().toString(36); setCookie(SID,sid,180);} var hasRef=document.referrer? (function(){try{return (new URL(document.referrer)).origin!==location.origin;}catch(e){return false;}})() : false; var st=load(); if(!st.session){st.session={sid:sid,firstLanding:loc(),firstReferrer:hasRef?document.referrer:"",ua:navigator.userAgent,browser:browserName(),lang:(navigator.language||""),ts:nowISO()}; st.pages=[];} var last=st.pages && st.pages.length? st.pages[st.pages.length-1]:null; var cur={url:loc(),ts:nowISO()}; if(!last||last.url!==cur.url){st.pages=(st.pages||[]).concat(cur).slice(-MAX);} save(st); ["pushState","replaceState"].forEach(function(fn){var orig=history[fn]; if(!orig) return; history[fn]=function(){var r=orig.apply(this,arguments); setTimeout(function(){var s=load(); var lst=s.pages&&s.pages.length? s.pages[s.pages.length-1]:null; var c={url:loc(),ts:nowISO()}; if(!lst||lst.url!==c.url){s.pages=(s.pages||[]).concat(c).slice(-MAX); save(s);} },0); return r;};}); window.addEventListener("popstate",function(){var s=load(); var lst=s.pages&&s.pages.length? s.pages[s.pages.length-1]:null; var c={url:loc(),ts:nowISO()}; if(!lst||lst.url!==c.url){s.pages=(s.pages||[]).concat(c).slice(-MAX); save(s);}}); function wireForm(form){ if(form.getAttribute("data-tracking-wired")) return; form.setAttribute("data-tracking-wired","1"); form.addEventListener("submit",function(){var s=load(); var sess=s.session||{}; var pages=(s.pages||[]).map(function(p){return p.url;}); var payload={"_visit_sid":(sess.sid||""),"_visit_first_landing":(sess.firstLanding||""),"_visit_first_referrer":(sess.firstReferrer||""),"_visit_browser":(sess.browser||""),"_visit_lang":(sess.lang||""),"_visit_ua":(sess.ua||""),"_visit_page_count":String(pages.length),"_visit_pages_json":JSON.stringify(s.pages||[]),"_visit_pages_compact":pages.join(" | ")}; for(var k in payload){if(!payload.hasOwnProperty(k)) continue; var input=form.querySelector("input[name=\""+k+"\"]"); if(!input){input=document.createElement("input"); input.type="hidden"; input.name=k; form.appendChild(input);} input.value=payload[k];} }, true); } var forms=document.querySelectorAll("form[data-include-tracking]"); for(var i=0;i<forms.length;i++){wireForm(forms[i]);} new MutationObserver(function(muts){for(var i=0;i<muts.length;i++){var nlist=muts[i].addedNodes; for(var j=0;j<nlist.length;j++){var n=nlist[j]; if(n.nodeType!==1) continue; if(n.matches&&n.matches("form[data-include-tracking]")) wireForm(n); var inner=n.querySelectorAll? n.querySelectorAll("form[data-include-tracking]"):[]; for(var k=0;k<inner.length;k++){wireForm(inner[k]);}}}}).observe(document.documentElement,{childList:true,subtree:true}); })();</script> </body> </html>