<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jonathan Björkskog</title>
	<atom:link href="https://jonathanbjorkskog.com/feed" rel="self" type="application/rss+xml" />
	<link>https://jonathanbjorkskog.com/</link>
	<description>Growth Marketing since 2009</description>
	<lastBuildDate>Thu, 25 Dec 2025 10:30:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>The Fruit Bubble game, Here it is!</title>
		<link>https://jonathanbjorkskog.com/the-fruit-bubble-game</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Wed, 24 Dec 2025 21:10:50 +0000</pubDate>
				<category><![CDATA[Projects]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2772</guid>

					<description><![CDATA[Okay, the game we created together with the kids during Christmas 2025 took off, and a lot of people found it from Instagram. A lot of you are asking where it is, so if you Googled &#8220;Gretas Fruit Bubbles&#8221; or &#8220;Widetoes Fruit bubbles&#8221; and ended up here, you are at the right place. Building a...]]></description>
										<content:encoded><![CDATA[
<p>Okay, the game we created together with the kids during Christmas 2025 took off, and a lot of people found it from Instagram. A lot of you are asking where it is, so if you Googled &#8220;Gretas Fruit Bubbles&#8221; or &#8220;Widetoes Fruit bubbles&#8221; and ended up here, you are at the right place.</p>



<div class="wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns2772_0119b1-1e"><a class="kb-button kt-button button kb-btn2772_4f6aed-f0 kt-btn-size-standard kt-btn-width-type-auto kb-btn-global-fill kt-btn-has-text-true kt-btn-has-svg-false wp-block-kadence-singlebtn" href="https://ballmerge.lovable.app/"><span class="kt-btn-inner-text">Play Fruit Bubbles game here!</span></a></div>



<figure class="wp-block-image size-full"><a href="https://ballmerge.lovable.app/"><img fetchpriority="high" decoding="async" width="486" height="895" src="https://jonathanbjorkskog.com/wp-content/uploads/2025/12/image.png" alt="" class="wp-image-2773" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2025/12/image.png 486w, https://jonathanbjorkskog.com/wp-content/uploads/2025/12/image-337x620.png 337w, https://jonathanbjorkskog.com/wp-content/uploads/2025/12/image-7x12.png 7w, https://jonathanbjorkskog.com/wp-content/uploads/2025/12/image-150x276.png 150w" sizes="(max-width: 486px) 100vw, 486px" /></a></figure>



<h2 class="wp-block-heading">Building a Fruit Merge Game with My Kids (and AI)</h2>



<p>There&#8217;s something magical about building things with your kids. Last week, we sat down together and created a game, not by teaching them to code, but by&nbsp;<em>prompting</em>&nbsp;together.</p>



<h2 class="wp-block-heading">The Game</h2>



<p>It&#8217;s a simple concept: drop fruits into a container and watch physics do its thing. When two fruits of the same type collide, they merge into a bigger fruit. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f352.png" alt="🍒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> becomes <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f353.png" alt="🍓" class="wp-smiley" style="height: 1em; max-height: 1em;" />, <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f353.png" alt="🍓" class="wp-smiley" style="height: 1em; max-height: 1em;" /> becomes <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f34a.png" alt="🍊" class="wp-smiley" style="height: 1em; max-height: 1em;" />, and so on—all the way up to the mighty <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f349.png" alt="🍉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> watermelon.</p>



<p>The goal? Score as many points as possible before the fruits stack too high.</p>



<h2 class="wp-block-heading">Building It Together</h2>



<p>What made this project special wasn&#8217;t the code—it was the collaboration. My kids had opinions.&nbsp;<em>Strong</em>&nbsp;opinions.</p>



<p>&#8220;The watermelon should be HUGE!&#8221;</p>



<p>&#8220;Can we add confetti when you get a high score?&#8221;</p>



<p>&#8220;What if the fruits explode with sparkles when they merge?&#8221;</p>



<p>Each idea became a prompt. Each prompt became a feature. They watched their ideas appear on screen in real-time, and their excitement was contagious.</p>



<h2 class="wp-block-heading">What We Learned</h2>



<p>For them: creativity has immediate results. Ideas matter. You don&#8217;t need to know&nbsp;<em>how</em>&nbsp;something works to build it.</p>



<p>For me: the best features came from their unfiltered imagination. Kids don&#8217;t self-censor. They just ask for what would be fun.</p>



<p><a href="https://ballmerge.lovable.app/"><strong>Try it yourself</strong>&nbsp;and see if you can beat your family high score</a>. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f349.png" alt="🍉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CAGR Calculator &#8211; Growth Rate Calculator for Ecommerce</title>
		<link>https://jonathanbjorkskog.com/cagr-calculator</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Wed, 04 Sep 2024 07:58:01 +0000</pubDate>
				<category><![CDATA[Finance]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2728</guid>

					<description><![CDATA[Mastering Growth Rates: A Simple Tool to Calculate Simple Growth Rate, CAGR, and Average Growth Rate Understanding growth rates is essential for anyone involved in finance, business development, or investment. Whether you’re evaluating the performance of a business, planning for future growth, or assessing the potential return on investment, calculating growth rates accurately is key....]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Mastering Growth Rates: A Simple Tool to Calculate Simple Growth Rate, CAGR, and Average Growth Rate</h2>



<p>Understanding growth rates is essential for anyone involved in finance, business development, or investment. Whether you’re evaluating the performance of a business, planning for future growth, or assessing the potential return on investment, calculating growth rates accurately is key. Growth rates help you make informed decisions by showing how quickly a metric, such as revenue or profits, is growing over time.</p>



<p>To simplify this process, I’ve created a handy tool for calculating three of the most common growth rate metrics: <strong>Simple Growth Rate</strong>, <strong>Compound Annual Growth Rate (CAGR)</strong>, and <strong>Average Growth Rate</strong>. This tool is perfect for entrepreneurs, financial analysts, investors, and anyone else looking to quickly analyze growth data.</p>



<h3 class="wp-block-heading">Growth Rate Calculator Tool</h3>



<p>You can <strong>use the calculator below</strong> to compute the <strong>Simple Growth Rate</strong>, <strong>Compound Annual Growth Rate (CAGR)</strong>, and <strong>Average Growth Rate</strong>. Just enter your data and let the tool do the work for you. The default value is Revenue, but you can also use numbers for profit or turnover to get their specific growth rates.</p>


<div class="kb-row-layout-wrap kb-row-layout-id2728_f804db-8c alignnone has-theme-palette7-background-color kt-row-has-bg wp-block-kadence-rowlayout"><div class="kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top">

<div class="wp-block-kadence-column kadence-column2728_1307f3-82"><div class="kt-inside-inner-col">    <div id="growth-calculator-container">
        <style>
            #growth-calculator-container {
                font-family: Arial, sans-serif;
                margin: 20px 0;
            }
            .calculator {
                margin-bottom: 30px;
            }
            input {
                margin: 5px 0;
                padding: 8px;
                width: 200px;
            }
            button {
                padding: 8px 15px;
                margin-top: 10px;
                cursor: pointer;
            }
            .result {
                margin-top: 10px;
                font-weight: bold;
            }
        </style>

        <!-- Simple Growth Rate Calculator -->
        <div class="calculator">
            <h2>Simple Growth Rate Calculator</h2>
            <label for="simple-start">Revenue in Previous Period:</label>
            <input type="number" id="simple-start" placeholder="e.g., 1000"><br>
            <label for="simple-end">Revenue in Current Period:</label>
            <input type="number" id="simple-end" placeholder="e.g., 1200"><br>
            <button onclick="calculateSimpleGrowth()">Calculate Simple Growth Rate</button>
            <p class="result" id="simple-result"></p>
        </div>

        <!-- CAGR Calculator -->
        <div class="calculator">
            <h2>Compound Annual Growth Rate (CAGR) Calculator</h2>
            <label for="cagr-start">Beginning Revenue:</label>
            <input type="number" id="cagr-start" placeholder="e.g., 1000"><br>
            <label for="cagr-end">Ending Revenue:</label>
            <input type="number" id="cagr-end" placeholder="e.g., 1500"><br>
            <label for="cagr-years">Number of Years:</label>
            <input type="number" id="cagr-years" placeholder="e.g., 3"><br>
            <button onclick="calculateCAGR()">Calculate CAGR</button>
            <p class="result" id="cagr-result"></p>
        </div>

        <!-- Average Growth Rate Calculator -->
        <div class="calculator">
            <h2>Average Growth Rate Calculator</h2>
            <label for="growth-rates">Enter Growth Rates (comma-separated):</label>
            <input type="text" id="growth-rates" placeholder="e.g., 10, 20, 30"><br>
            <button onclick="calculateAverageGrowth()">Calculate Average Growth Rate</button>
            <p class="result" id="average-result"></p>
        </div>

        <script>
            // Simple Growth Rate Calculation
            function calculateSimpleGrowth() {
                const startValue = parseFloat(document.getElementById('simple-start').value);
                const endValue = parseFloat(document.getElementById('simple-end').value);
                if (isNaN(startValue) || isNaN(endValue)) {
                    document.getElementById('simple-result').innerText = "Please enter valid numbers.";
                    return;
                }
                const growthRate = ((endValue - startValue) / startValue) * 100;
                document.getElementById('simple-result').innerText = `Simple Growth Rate: ${growthRate.toFixed(2)}%`;
            }

            // CAGR Calculation
            function calculateCAGR() {
                const startValue = parseFloat(document.getElementById('cagr-start').value);
                const endValue = parseFloat(document.getElementById('cagr-end').value);
                const years = parseFloat(document.getElementById('cagr-years').value);
                if (isNaN(startValue) || isNaN(endValue) || isNaN(years) || years <= 0) {
                    document.getElementById('cagr-result').innerText = "Please enter valid numbers.";
                    return;
                }
                const cagr = ((endValue / startValue) ** (1 / years) - 1) * 100;
                document.getElementById('cagr-result').innerText = `CAGR: ${cagr.toFixed(2)}%`;
            }

            // Average Growth Rate Calculation
            function calculateAverageGrowth() {
                const ratesInput = document.getElementById('growth-rates').value;
                const rates = ratesInput.split(',').map(rate => parseFloat(rate.trim()));
                if (rates.some(isNaN)) {
                    document.getElementById('average-result').innerText = "Please enter valid numbers.";
                    return;
                }
                const sumOfRates = rates.reduce((sum, rate) => sum + rate, 0);
                const averageGrowthRate = sumOfRates / rates.length;
                document.getElementById('average-result').innerText = `Average Growth Rate: ${averageGrowthRate.toFixed(2)}%`;
            }
        </script>
    </div>
    
</div></div>

</div></div>


<h3 class="wp-block-heading">Understanding the Different Types of Growth Rates</h3>



<p>Now that you&#8217;ve seen how the tool works, let’s dive deeper into what each growth rate means and when to use them.</p>



<h4 class="wp-block-heading">1. <strong>Simple Growth Rate</strong></h4>



<p><strong>What is Simple Growth Rate?</strong></p>



<p>Simple Growth Rate is the most straightforward way to measure growth between two periods. It calculates the percentage increase or decrease from one period to the next. This type of growth rate is often used to measure short-term growth, such as month-over-month or year-over-year changes.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="620" height="92" src="https://jonathanbjorkskog.com/wp-content/uploads/2024/09/simple-growth-rate-formula-620x92.jpg" alt="" class="wp-image-2731" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2024/09/simple-growth-rate-formula-620x92.jpg 620w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/simple-growth-rate-formula-768x114.jpg 768w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/simple-growth-rate-formula-18x3.jpg 18w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/simple-growth-rate-formula-150x22.jpg 150w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/simple-growth-rate-formula.jpg 1093w" sizes="(max-width: 620px) 100vw, 620px" /></figure>



<p><strong>Use Cases:</strong></p>



<ul class="wp-block-list">
<li><strong>Monthly or Quarterly Performance Analysis:</strong> Quickly assess the performance of a business, project, or investment over a short period.</li>



<li><strong>Sales and Marketing Metrics:</strong> Evaluate the growth of sales, customer acquisition, or web traffic.</li>



<li><strong>Tracking Specific Metrics:</strong> Useful when you need to track the growth of specific metrics like revenue, expenses, or customer base.</li>
</ul>



<p><strong>Example:</strong> If a company&#8217;s revenue increased from $100,000 to $120,000 in one year, the Simple Growth Rate is 20%.</p>



<h4 class="wp-block-heading">2. <strong>Compound Annual Growth Rate (CAGR)</strong></h4>



<p><strong>What is CAGR?</strong></p>



<p>The Compound Annual Growth Rate (CAGR) is a more sophisticated metric that measures the mean annual growth rate of an investment, business metric, or financial figure over a specified period. Unlike the Simple Growth Rate, CAGR assumes the growth rate is compounded annually, which makes it more accurate for analyzing longer periods.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="620" height="124" src="https://jonathanbjorkskog.com/wp-content/uploads/2024/09/CAGR-formula-620x124.jpg" alt="" class="wp-image-2732" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2024/09/CAGR-formula-620x124.jpg 620w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/CAGR-formula-768x154.jpg 768w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/CAGR-formula-18x4.jpg 18w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/CAGR-formula-150x30.jpg 150w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/CAGR-formula.jpg 915w" sizes="(max-width: 620px) 100vw, 620px" /></figure>



<p><strong>Use Cases:</strong></p>



<ul class="wp-block-list">
<li><strong>Investment Analysis:</strong> CAGR is widely used to evaluate the performance of investments such as stocks, mutual funds, or portfolios over time.</li>



<li><strong>Business Valuation:</strong> When valuing a company or forecasting future growth, CAGR provides a realistic picture of how the company’s financials might evolve.</li>



<li><strong>Comparing Growth Across Sectors:</strong> Useful for comparing the growth rates of different companies or sectors over the same period.</li>
</ul>



<p><strong>Example:</strong> If an investment grows from $10,000 to $15,000 over three years, the CAGR is approximately 14.47%.</p>



<h4 class="wp-block-heading">3. <strong>Average Growth Rate</strong></h4>



<p><strong>What is Average Growth Rate?</strong></p>



<p>The Average Growth Rate calculates the arithmetic average of multiple growth rates over a given period. Unlike CAGR, it does not account for compounding. This makes it a simpler, but sometimes less accurate, way to calculate growth over time when the growth rate varies significantly.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="620" height="108" src="https://jonathanbjorkskog.com/wp-content/uploads/2024/09/Average-Growth-Rate-Formula-620x108.jpg" alt="" class="wp-image-2733" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2024/09/Average-Growth-Rate-Formula-620x108.jpg 620w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/Average-Growth-Rate-Formula-768x133.jpg 768w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/Average-Growth-Rate-Formula-18x3.jpg 18w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/Average-Growth-Rate-Formula-150x26.jpg 150w, https://jonathanbjorkskog.com/wp-content/uploads/2024/09/Average-Growth-Rate-Formula.jpg 955w" sizes="auto, (max-width: 620px) 100vw, 620px" /></figure>



<p><strong>Use Cases:</strong></p>



<ul class="wp-block-list">
<li><strong>Quick Estimates:</strong> Ideal for quick, back-of-the-envelope calculations where you need a rough estimate of growth over multiple periods.</li>



<li><strong>Non-Financial Metrics:</strong> Useful for calculating growth rates in metrics like user growth, engagement rates, or production outputs that don’t necessarily compound over time.</li>



<li><strong>Analyzing Fluctuating Data:</strong> When data points vary significantly, the average growth rate can provide a broad view of growth trends.</li>
</ul>



<p><strong>Example:</strong> If a company’s growth rates over three years are 10%, 20%, and 15%, the Average Growth Rate would be 15%.</p>



<h3 class="wp-block-heading">Simple Growht Rate, CAGR &amp; Average Growth Rate summarized</h3>



<p>Understanding and accurately calculating growth rates are crucial for making informed decisions in business and finance. Whether you&#8217;re looking at the short-term growth of a project, the long-term returns of an investment, or comparing different growth scenarios, knowing which type of growth rate to use is vital.</p>



<p>The Growth Rate Calculator tool provided here simplifies the process, allowing you to calculate Simple Growth Rate, CAGR, and Average Growth Rate quickly and easily. Use this tool to enhance your analyses, forecast more accurately, and make better strategic decisions.</p>



<p>Feel free to try the tool out and bookmark if for easy access in the future, and let me know if you have any questions or need further insights into growth rates!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Translatepress vs Polylang &#8211; What is the best translation plugin for WordPress?</title>
		<link>https://jonathanbjorkskog.com/translatepress-vs-polylang</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Fri, 16 Aug 2024 18:53:48 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[SEO, Search engine optimization]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[WordPress SEO]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2667</guid>

					<description><![CDATA[As a marketer, I have been launching hundreds of WordPress sites and Woocommerce webshops. When it comes to translation, you can do it the easy way, or the good way, but is there a good and easy enough way? Let&#8217;s explore the translation plugins for WordPress and Woocommerce to find out! The architectural difference between...]]></description>
										<content:encoded><![CDATA[
<p>As a marketer, I have been launching hundreds of WordPress sites and Woocommerce webshops. When it comes to translation, you can do it the easy way, or the good way, but is there a good and easy enough way? Let&#8217;s explore the translation plugins for WordPress and Woocommerce to find out!</p>



<span id="more-2667"></span>



<h2 class="wp-block-heading">The architectural difference between translation plugins</h2>



<p>The first thing we need to do is to choose if we want to have a lot of differences between the content in the different languages, or if we are okay with having the same content on each language version, just translated. There are pros and cons to both alternatives.</p>



<h3 class="wp-block-heading">Group A: Translation by having each &#8220;post&#8221; in each language</h3>



<p>In this group, we have Polylang and WPML. A Spanish version of the content is a separate post/page/product in WordPress. We can customize the kind of content we have for each language version. But we will have several versions of each content in the backend (and posts database) which might slow down the backend, and provide several issues, especially on e-commerce when having Woocommerce activated and wanting to sync/handle the inventory separately or with inventory plugins. Import plugins like wp-all-import also have issues getting things correct if using Woocommerce. We must also create each post/page/product in each language, which is time-consuming.</p>



<h3 class="wp-block-heading">Group B: The, let&#8217;s call it &#8220;frontend translations&#8221;</h3>



<p>In group B we have TranslatePress and Weglot and some more. This group of plugins keeps only one version of the content in the backend and standard WordPress/Woocommerce interface. The translation is done in front-end and the translations are stored in separate tables in your WordPress database with TranslatePress and in third-party databases with Weglot and others. I only recommend TranslatePress from this group. With this group, WordPress itself &#8220;thinks&#8221; that only one language is activated, and any import plugin, warehouse plugin, or similar usually works well. The standard WordPress database stays small and clean. We can easily use integrations to DeepL or a translation AI to create base versions of translations on the fly.</p>



<p>Earlier I would not have gone for anything in this group, but now with the new and improved <a href="https://translatepress.com/?ref=588" target="_blank" rel="noreferrer noopener nofollow">TranslatePress</a>, I see myself going for that alternative almost in every case. It is fast, easy to use, visual, and extremely automated (with AI, DeepL, or Google Translate integration). I am using TranslatePress on the site you are now visiting. </p>



<figure class="wp-block-image alignwide size-full is-style-default"><img loading="lazy" decoding="async" width="2188" height="1261" src="https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress.jpg" alt="This is what TranslationPress interface looks like when translating a page or a post." class="wp-image-2706" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress.jpg 2188w, https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress-620x357.jpg 620w, https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress-768x443.jpg 768w, https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress-1536x885.jpg 1536w, https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress-2048x1180.jpg 2048w, https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress-18x10.jpg 18w, https://jonathanbjorkskog.com/wp-content/uploads/2024/08/translate-interface-of-wordpress-translation-plugin-TranslatePress-150x86.jpg 150w" sizes="auto, (max-width: 2188px) 100vw, 2188px" /><figcaption class="wp-element-caption">This is what TranslationPress interface looks like when translating a page or a post. It is visual and easy.</figcaption></figure>



<p>The drawback with this group is that it is translations only, we cannot have separate content/pages/products in separate languages. But sometimes that tradeoff might pay back in getting things done faster as well.</p>



<h2 class="wp-block-heading">So, what is the best translation plugin for WordPress / Woocommerce?</h2>



<p>I do not recommend a group, but I will recommend a plugin for each group. Earlier I used WPML a lot but changed to Polylang because it was leaner and faster. Both are from group A. Nowadays I almost always use TranslatePress (Group B) if possible, because with this I can launch a new language version of a site in 1 hour with AI or deepL translations automatically appearing just by clicking through the site.</p>



<p>If there are a lot of customizations between languages needed, I use Polylang and things take A LOT longer. If not, I use TranslatePress, and things go FAST.</p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://translatepress.com/?ref=588" target="_blank" rel="noreferrer noopener nofollow">Get TranslatePress here</a></div>



<div class="wp-block-button"><a class="wp-block-button__link has-theme-palette-6-background-color has-background wp-element-button" href="https://polylang.pro/" target="_blank" rel="noreferrer noopener nofollow">Get Polylang here</a></div>
</div>



<h3 class="wp-block-heading">What about <a href="https://jonathanbjorkskog.com/12-rules-for-seo">seo</a> when using front-end translation plugins?</h3>



<p>One huge reason I earlier ditched front-end translation plugins was because they did not create their clean language URLs, nor the right language in the source code. This was not tolerable as an SEO, but TranslatePress has fixed this. So with translatePress (the only frontend translation plugin I recommend) we get language URLs in subfolders (like jonathanbjorkskog.com/es/ for Spanish etc) AND the right language content in the source code. This is because the translations are stored in our own WordPress database and called from there based on the URL.</p>



<h2 class="wp-block-heading">Comparison of WordPress translation plugins Polylang and TranslatePress</h2>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Plugin / Feature</strong></td><td><strong>Polylang</strong></td><td><strong>TranslatePress</strong></td></tr><tr><td>Customize content for each language</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td>✘</td></tr><tr><td>Auto-translate full sites instantly</td><td>✘</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Allows &#8220;unlimited languages&#8221;</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Integrate to DeepL &amp; Translation AI</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Search engine friendly</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Translate strings (titles, description, URL)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Works well with import plugins and connections to third-party warehouse systems</td><td>✘</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Very customizable</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td>✘</td></tr><tr><td>Easy to use</td><td>✘</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr></tbody></table><figcaption class="wp-element-caption">Comparison table Polylang vs TranslatePress</figcaption></figure>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://translatepress.com/?ref=588" target="_blank" rel="noreferrer noopener nofollow">Get TranslatePress here</a></div>



<div class="wp-block-button"><a class="wp-block-button__link has-theme-palette-6-background-color has-background wp-element-button" href="https://polylang.pro/" target="_blank" rel="noreferrer noopener nofollow">Get Polylang here</a></div>
</div>



<p>To summarize, I recommend TranslatePress whenever you can live with having the same, only translated, content in each language. The language versions will be up and running in a day. However, if you need a lot of custom content that differs from language to language, I recommend Polylang. But be aware of that it will take A LOT more time to get things done.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Simplifying GPT: A Beginner&#8217;s Guide to Creating Chatbot Experiences with ChatGPT</title>
		<link>https://jonathanbjorkskog.com/create-your-own-gpt-in-chatgpt</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Tue, 13 Feb 2024 11:18:04 +0000</pubDate>
				<category><![CDATA[Technical]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2636</guid>

					<description><![CDATA[Creating a custom version of ChatGPT tailored to your personal or business needs can be an exciting way to leverage AI for specific tasks or interests. Here&#8217;s a simplified guide on how to build your own custom ChatGPT using OpenAI&#8217;s GPT builder: Step-by-Step Guide to Building Your Custom ChatGPT 1. Understanding GPTs 2. Getting Started...]]></description>
										<content:encoded><![CDATA[
<p>Creating a custom version of ChatGPT tailored to your personal or business needs can be an exciting way to leverage AI for specific tasks or interests. Here&#8217;s a simplified guide on how to build your own custom ChatGPT using OpenAI&#8217;s GPT builder:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="620" height="354" src="https://jonathanbjorkskog.com/wp-content/uploads/2024/02/create-your-own-gpt-620x354.webp" alt="" class="wp-image-2639" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2024/02/create-your-own-gpt-620x354.webp 620w, https://jonathanbjorkskog.com/wp-content/uploads/2024/02/create-your-own-gpt-768x439.webp 768w, https://jonathanbjorkskog.com/wp-content/uploads/2024/02/create-your-own-gpt-1536x878.webp 1536w, https://jonathanbjorkskog.com/wp-content/uploads/2024/02/create-your-own-gpt-150x86.webp 150w, https://jonathanbjorkskog.com/wp-content/uploads/2024/02/create-your-own-gpt.webp 1792w" sizes="auto, (max-width: 620px) 100vw, 620px" /></figure>



<h2 class="wp-block-heading"><strong>Step-by-Step Guide to Building Your Custom ChatGPT</strong></h2>



<h3 class="wp-block-heading"><strong>1. Understanding GPTs</strong></h3>



<ul class="wp-block-list">
<li><strong>What They Are:</strong> Custom GPTs are tailored versions of ChatGPT that you can create to meet specific needs or interests, such as a chatbot that shares fun facts about otters.</li>
</ul>



<h3 class="wp-block-heading"><strong>2. Getting Started</strong></h3>



<ul class="wp-block-list">
<li><strong>Access Requirements:</strong> Ensure you have a ChatGPT Plus or Enterprise account, as the custom GPT builder feature is exclusive to these users.</li>
</ul>



<h3 class="wp-block-heading"><strong>3. Creating Your Custom GPT</strong></h3>



<ul class="wp-block-list">
<li><strong>Navigating to the Builder:</strong> Log into your OpenAI account, go to the Explore section, and select &#8220;Create a GPT.&#8221;</li>



<li><strong>Setting Instructions:</strong> Enter your desired instructions for your custom GPT in the Create panel. Use plain English to describe what you want your GPT to do.</li>



<li><strong>Preview and Refine:</strong> Use the Preview panel to interact with your GPT as you build it, refining its behavior based on the responses you receive.</li>
</ul>



<h3 class="wp-block-heading"><strong>4. Customizing Your GPT</strong></h3>



<ul class="wp-block-list">
<li><strong>Advanced Settings:</strong> Click on &#8220;Configure&#8221; to access advanced customization options, including changing the chatbot&#8217;s name, profile picture, and adding specific instructions.</li>



<li><strong>Uploading Knowledge:</strong> Enhance your GPT&#8217;s responses by uploading relevant files for it to reference, providing a richer knowledge base for more accurate and contextual responses.</li>
</ul>



<h3 class="wp-block-heading"><strong>5. Finalizing Your GPT</strong></h3>



<ul class="wp-block-list">
<li><strong>Saving Your GPT:</strong> Once satisfied with your custom GPT, save it by selecting your preferred sharing settings, ensuring your GPT is accessible as you desire.</li>



<li><strong>Using Your GPT:</strong> Access your custom GPT from the ChatGPT home page sidebar and interact with it as needed.</li>
</ul>



<h3 class="wp-block-heading"><strong>6. Sharing and Editing Your GPT</strong></h3>



<ul class="wp-block-list">
<li><strong>Sharing:</strong> If your GPT is public or shared, simply use the provided link to share it with others.</li>



<li><strong>Editing:</strong> To make changes to your custom GPT, find it under the Explore section, select &#8220;Edit,&#8221; make your adjustments, and update.</li>
</ul>



<h3 class="wp-block-heading"><strong>7. Ensuring Accuracy and Privacy</strong></h3>



<ul class="wp-block-list">
<li><strong>Verification:</strong> Given that GPT models can sometimes produce inaccurate responses (&#8220;hallucinate&#8221;), it&#8217;s important to verify the information provided by your custom GPT.</li>



<li><strong>Privacy Controls:</strong> Be mindful of the information uploaded to your GPT, especially sensitive data, to prevent potential breaches.</li>
</ul>



<p>By following these steps, you can create a custom ChatGPT that serves your unique needs, from business applications to personal interests. Whether it&#8217;s generating specific content, automating tasks, or providing specialized information, your custom GPT can become a valuable tool in your digital toolkit.</p>



<h2 class="wp-block-heading">Examples of GPT&#8217;s I have made:</h2>



<p><a href="https://chat.openai.com/g/g-XkKH4AkfA-ecommerce-growth-guide">Ecommerce Growth Guide</a>: Helping you with financial and growth-related functions in ecommerce.</p>



<p><a href="https://chat.openai.com/g/g-Q3tsPxgVq-yhdistelylainaopas">Yhdistelylainaopas</a>: An expert helping people with questions around refinancing of loans in Finnish.</p>



<p><a href="https://chat.openai.com/g/g-ZaAnzQ7JA-disc-golf-mate">Disc Golf Mate</a>: Helping beginners and pros in Disc Golf to choose the right discs for different environments.</p>



<p><a href="https://chat.openai.com/g/g-B2IYMy7bP-widetoes-paljasjalkakenka-opas">WideToes Paljasjalkakenkä-opas</a>: A helper in explaining foot health and choosing the right shoe for your needs.</p>



<p>You can try these if you have a plus account, or create your own. It&#8217;s usually really fun!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Create wildcard redirects in php</title>
		<link>https://jonathanbjorkskog.com/wildcard-redirect-in-php</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Tue, 10 Oct 2023 15:36:33 +0000</pubDate>
				<category><![CDATA[Technical]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2622</guid>

					<description><![CDATA[In PHP, you can create wildcard redirects by using regular expressions to match patterns in the requested URLs and then redirecting based on those patterns. You can achieve this using the preg_match() function to match the URL against a regular expression pattern and then use header("Location: ...") to perform the redirect. Here&#8217;s an example of...]]></description>
										<content:encoded><![CDATA[
<p>In PHP, you can create wildcard redirects by using regular expressions to match patterns in the requested URLs and then redirecting based on those patterns. You can achieve this using the <code>preg_match()</code> function to match the URL against a regular expression pattern and then use <code>header("Location: ...")</code> to perform the redirect.</p>



<p>Here&#8217;s an example of how you can create a wildcard redirect in PHP using regular expressions:</p>



<pre class="wp-block-code"><code>// Get the requested URL
$requestUri = $_SERVER&#91;'REQUEST_URI'];

// Define regular expression pattern for matching specific patterns
$pattern = '/^\/user\/(\d+)\/?$/'; // This pattern matches URLs like /user/{user_id}/

// Check if the requested URL matches the pattern
if (preg_match($pattern, $requestUri, $matches)) {
    // Extract the user ID from the URL
    $userId = $matches&#91;1];
    
    // Redirect to a specific user profile page
    header("Location: /profile.php?user_id=$userId");
    exit();
} else {
    // Handle other cases or show an error page
    echo "Page not found";
}</code></pre>



<p>In this example, the regular expression pattern <code>'/^\/user\/(\d+)\/?$/'</code> matches URLs like <code>/user/{user_id}/</code>. If the requested URL matches this pattern, it extracts the user ID and redirects to a specific user profile page. You can modify the regular expression pattern to match different URL patterns according to your requirements.</p>



<h2 class="wp-block-heading">Redirect all subdomains (www and non-www for example)</h2>



<p>To redirect all the specified versions of subdomains to the same destination, you can use the following code:</p>



<pre class="wp-block-code"><code>// Get the requested URL
$requestUri = $_SERVER&#91;'HTTP_HOST'] . $_SERVER&#91;'REQUEST_URI'];

// Define regular expression pattern for matching different subdomains and the root path
$pattern = '/^(www\.)?example\.com\/?$/i';

// Check if the requested URL matches the pattern
if (preg_match($pattern, $requestUri)) {
    // Redirect to the desired destination (in this case, the root of the website)
    header("Location: https://example.com/");
    exit();
} else {
    // Handle other cases or show an error page
    echo "Page not found";
}</code></pre>



<p>In this code, the regular expression <code>'/^(www\.)?example\.com\/?$/i'</code> matches URLs like <code>http://example.com/</code>, <code>https://example.com/</code>, <code>http://wwwexample.com/</code>, and <code>https://wwwexample.com/</code> case-insensitively. If the requested URL matches this pattern, it redirects to <code>https://example.com/</code>. If the URL doesn&#8217;t match this pattern, you can handle other cases or show an error message as needed.</p>



<p>Please note that you might need to adjust the regular expression pattern according to your specific requirements or domain variations. The <code>i</code> modifier in the regular expression pattern makes the matching case insensitive, allowing it to match variations in capitalization.</p>



<p>Please note that handling redirects in this way can be powerful, but it also requires careful consideration of the regular expressions used to avoid unintended matches and redirection loops.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Do Redirects for some URL&#8217;s before letting the CMS handle the rest</title>
		<link>https://jonathanbjorkskog.com/url-redirect-before-cms</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 08:31:40 +0000</pubDate>
				<category><![CDATA[Technical]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2619</guid>

					<description><![CDATA[Question: Can I somehow do some settings in my domain, so that certain URLs are redirected even before the domain starts showing the content and stuff that the CMS is handling? Yes, you can set up URL redirections at the domain level before content is displayed by the CMS (Content Management System). This can be...]]></description>
										<content:encoded><![CDATA[
<p>Question: Can I somehow do some settings in my domain, so that certain URLs are redirected even before the domain starts showing the content and stuff that the CMS is handling?</p>



<p>Yes, you can set up URL redirections at the domain level before content is displayed by the CMS (Content Management System). This can be achieved through domain configuration settings provided by your domain registrar or web hosting provider. Here&#8217;s how you can do it:</p>



<h3 class="wp-block-heading">Method 1: Using Domain Registrar&#8217;s Control Panel</h3>



<ol class="wp-block-list">
<li><strong>Log in to Your Domain Registrar&#8217;s Control Panel:</strong> Access your domain registrar&#8217;s website and log in to your account.</li>



<li><strong>Find Domain Management or DNS Settings:</strong> Look for options like &#8220;Domain Management,&#8221; &#8220;DNS Settings,&#8221; or &#8220;Domain Control Panel&#8221; in your account dashboard.</li>



<li><strong>Set up URL Redirection:</strong> Within the DNS settings, find the option for URL redirection or URL forwarding. Different registrars might have different names for this feature.</li>



<li><strong>Configure Redirection:</strong> Enter the specific URLs you want to redirect and provide the destination URL where you want the traffic to be redirected. Some registrars might also allow you to choose the type of redirection (e.g., 301 Permanent Redirect or 302 Temporary Redirect).</li>



<li><strong>Save Your Settings:</strong> After entering the necessary information, save your settings. The changes might take some time to propagate across the internet, so be patient.</li>
</ol>



<h3 class="wp-block-heading">Method 2: Using Web Hosting Control Panel</h3>



<p>If your website is hosted on a server and you have access to a control panel (such as cPanel or Plesk), you can set up URL redirections there:</p>



<ol class="wp-block-list">
<li><strong>Log in to Your Hosting Control Panel:</strong> Log in to your hosting provider&#8217;s control panel.</li>



<li><strong>Find Redirects or URL Forwarding Option:</strong> Look for options like &#8220;Redirects,&#8221; &#8220;URL Forwarding,&#8221; or &#8220;Forwarding&#8221; within your control panel.</li>



<li><strong>Configure Redirection:</strong> Enter the specific URLs you want to redirect and specify the destination URL.</li>



<li><strong>Choose Redirection Type:</strong> Select the type of redirection you want (301 Permanent Redirect or 302 Temporary Redirect).</li>



<li><strong>Save Your Settings:</strong> Save the configuration. Similar to domain registrar settings, changes might take some time to propagate.</li>
</ol>



<p>By setting up URL redirections at the domain level using either of these methods, you can redirect traffic to specific URLs before your CMS handles the content. Remember that the exact steps and terminology might vary based on your domain registrar or hosting provider, so refer to their documentation or support resources if you encounter difficulties.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Add Google Analytics 4 (GA4) to a Woocommerce site with Tag Manager (GTM)</title>
		<link>https://jonathanbjorkskog.com/google-analytics-4-gtm-woocommerce</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Wed, 07 Jun 2023 04:37:22 +0000</pubDate>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2605</guid>

					<description><![CDATA[I have Woocommerce. I would like to create a Google Tag Manager Container and add Google Analytics 4 to it to track purchases. What steps should I take? To set up Google Tag Manager and add Google Analytics 4 to track purchases in your WooCommerce store, follow these steps: By following these steps, you should...]]></description>
										<content:encoded><![CDATA[
<p>I have Woocommerce. I would like to create a Google Tag Manager Container and add Google Analytics 4 to it to track purchases. What steps should I take?</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6.png" alt="Google Analytics 4 with Google Tag Manager in Woocommerce" class="wp-image-2608" srcset="https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6.png 1024w, https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6-620x620.png 620w, https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6-150x150.png 150w, https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6-768x768.png 768w, https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6-600x600.png 600w, https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6-500x500.png 500w, https://jonathanbjorkskog.com/wp-content/uploads/2023/06/jonathanbj_A_chatGPT_robot_installing_Google_Analytics_4_on_a_W_0971bcd5-a4fb-4db6-b007-34e3c2ce21a6-96x96.png 96w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>To set up Google Tag Manager and add Google Analytics 4 to track purchases in your WooCommerce store, follow these steps:</p>



<ol class="wp-block-list">
<li>Set up a Google Tag Manager account:
<ul class="wp-block-list">
<li>Go to the Google Tag Manager website (<a href="https://tagmanager.google.com/">https://tagmanager.google.com</a>) and sign in with your Google account.</li>



<li>Click on &#8220;Create Account&#8221; and provide an account name.</li>



<li>Follow the prompts to create a new container.</li>
</ul>
</li>



<li>Install Google Tag Manager on your WooCommerce site:
<ul class="wp-block-list">
<li>Install and activate the &#8220;DuracellTomi&#8217;s Google Tag Manager for WordPress&#8221; plugin on your WooCommerce site.</li>



<li>Go to &#8220;Settings&#8221; in your WordPress dashboard and click on &#8220;Google Tag Manager.&#8221;</li>



<li>Enter your Google Tag Manager container ID, which you can find in the Tag Manager interface (e.g., GTM-XXXXXX).</li>



<li>Save the changes.</li>
</ul>
</li>



<li>Configure the Google Tag Manager container:
<ul class="wp-block-list">
<li>In the Google Tag Manager interface, open your container.</li>



<li>Click on &#8220;Tags&#8221; in the left sidebar and then &#8220;New&#8221; to create a new tag.</li>



<li>Give your tag a descriptive name, such as &#8220;Google Analytics 4 &#8211; Purchase Tracking.&#8221;</li>



<li>Click on the tag configuration area and select &#8220;Google Analytics: GA4 Configuration.&#8221;</li>



<li>Enter your Google Analytics Measurement ID, which you can obtain from your Google Analytics 4 property (e.g., G-XXXXXX).</li>



<li>Configure the triggers for your tag. For purchase tracking, you should create a trigger that fires on the &#8220;Thank You&#8221; or &#8220;Order Confirmation&#8221; page.</li>



<li>Save the tag.</li>
</ul>
</li>



<li>Publish your changes:
<ul class="wp-block-list">
<li>Click on &#8220;Submit&#8221; in the upper-right corner of the Google Tag Manager interface.</li>



<li>Add a descriptive version name and description for your changes.</li>



<li>Click on &#8220;Publish&#8221; to publish the changes to your container.</li>
</ul>
</li>



<li>Test the implementation:
<ul class="wp-block-list">
<li>Make a test purchase on your WooCommerce site and reach the &#8220;Thank You&#8221; or &#8220;Order Confirmation&#8221; page.</li>



<li>In the Google Analytics 4 interface, navigate to the &#8220;Realtime&#8221; section and check if the purchase events are being tracked.</li>



<li>Verify that the events are recorded correctly in your Google Analytics reports.</li>
</ul>
</li>
</ol>



<p>By following these steps, you should be able to set up a Google Tag Manager container and add Google Analytics 4 to track purchases in your WooCommerce store. Remember to adjust the triggers and other configurations based on your specific needs and tracking requirements.</p>



<h2 class="wp-block-heading">Transaction and Transaction revenue tracking with GA4 &amp; GTM</h2>



<p>If I need to track transactions and transaction revenue, is there any more steps I need to take?</p>



<p>To track transactions and transaction revenue in Google Analytics 4 using Google Tag Manager, you&#8217;ll need to set up enhanced ecommerce tracking. Here are the additional steps:</p>



<ol class="wp-block-list">
<li>Enable Enhanced Ecommerce in Google Analytics 4:
<ul class="wp-block-list">
<li>Go to your Google Analytics 4 property.</li>



<li>In the left sidebar, click on &#8220;Data Streams.&#8221;</li>



<li>Click on your data stream and then click on &#8220;Configure&#8221; next to &#8220;Enhanced measurement.&#8221;</li>



<li>Enable the &#8220;Ecommerce purchases&#8221; option.</li>



<li>Save the changes.</li>
</ul>
</li>



<li>Configure Enhanced Ecommerce in Google Tag Manager:
<ul class="wp-block-list">
<li>In the Google Tag Manager interface, open your container.</li>



<li>Click on &#8220;Tags&#8221; in the left sidebar and find your existing Google Analytics 4 tag for purchase tracking.</li>



<li>Edit the tag and scroll down to the &#8220;Tag Configuration&#8221; section.</li>



<li>Click on the &#8220;Enable Enhanced Ecommerce Features&#8221; checkbox.</li>



<li>Save the tag.</li>
</ul>
</li>



<li>Send Enhanced Ecommerce data to Google Analytics:
<ul class="wp-block-list">
<li>Still in the Google Tag Manager interface, go to &#8220;Variables&#8221; in the left sidebar.</li>



<li>Click on &#8220;Configure&#8221; under the &#8220;Built-In Variables&#8221; section.</li>



<li>Enable the following variables under the &#8220;Enhanced Ecommerce&#8221; category:
<ul class="wp-block-list">
<li>&#8220;Transaction ID&#8221;</li>



<li>&#8220;Affiliation&#8221;</li>



<li>&#8220;Total Revenue&#8221;</li>



<li>&#8220;Tax&#8221;</li>



<li>&#8220;Shipping&#8221;</li>



<li>&#8220;Coupon Code&#8221;</li>



<li>&#8220;Product ID&#8221;</li>



<li>&#8220;Product Name&#8221;</li>



<li>&#8220;Product Price&#8221;</li>



<li>&#8220;Quantity&#8221;</li>
</ul>
</li>



<li>Save the changes.</li>
</ul>
</li>



<li>Update the Google Analytics 4 tag with Enhanced Ecommerce data:
<ul class="wp-block-list">
<li>Go back to your Google Analytics 4 tag for purchase tracking.</li>



<li>Scroll down to the &#8220;Fields to Set&#8221; section.</li>



<li>Add the following fields and values:
<ul class="wp-block-list">
<li>Field Name: &#8220;send_to&#8221; Value: &#8220;G-XXXXXXXXXX&#8221; (your Google Analytics Measurement ID)</li>



<li>Field Name: &#8220;event_name&#8221; Value: &#8220;purchase&#8221;</li>
</ul>
</li>



<li>In the &#8220;More Settings&#8221; section, expand the &#8220;Ecommerce&#8221; dropdown.</li>



<li>Configure the following fields:
<ul class="wp-block-list">
<li>&#8220;Transaction ID&#8221;: Choose the corresponding variable.</li>



<li>&#8220;Affiliation&#8221;: Choose the corresponding variable.</li>



<li>&#8220;Value&#8221;: Choose the corresponding variable for total revenue.</li>



<li>&#8220;Tax&#8221;: Choose the corresponding variable.</li>



<li>&#8220;Shipping&#8221;: Choose the corresponding variable.</li>



<li>&#8220;Coupon&#8221;: Choose the corresponding variable for coupon code.</li>



<li>&#8220;Items&#8221;: Configure the following sub-fields:
<ul class="wp-block-list">
<li>&#8220;Item ID&#8221;: Choose the corresponding variable for product ID.</li>



<li>&#8220;Item Name&#8221;: Choose the corresponding variable for product name.</li>



<li>&#8220;Price&#8221;: Choose the corresponding variable for product price.</li>



<li>&#8220;Quantity&#8221;: Choose the corresponding variable.</li>
</ul>
</li>
</ul>
</li>



<li>Save the tag.</li>
</ul>
</li>



<li>Publish your changes:
<ul class="wp-block-list">
<li>Click on &#8220;Submit&#8221; in the upper-right corner of the Google Tag Manager interface.</li>



<li>Add a descriptive version name and description for your changes.</li>



<li>Click on &#8220;Publish&#8221; to publish the changes to your container.</li>
</ul>
</li>



<li>Test the implementation:
<ul class="wp-block-list">
<li>Make a test purchase on your WooCommerce site and reach the &#8220;Thank You&#8221; or &#8220;Order Confirmation&#8221; page.</li>



<li>In the Google Analytics 4 interface, navigate to the &#8220;Conversions &gt; Ecommerce &gt; Purchases&#8221; section.</li>



<li>Verify that the transaction data, including revenue, tax, shipping, and coupon information, is recorded correctly.</li>
</ul>
</li>
</ol>



<p>By following these additional steps, you should be able to track transactions and transaction revenue using Google Analytics 4 with enhanced ecommerce tracking in your WooCommerce store. Remember to adjust the configuration based on your specific requirements and the data available in your WooCommerce setup.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How can I do redirects like i do in .htaccess but in a .NET environment</title>
		<link>https://jonathanbjorkskog.com/redirects-net</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Sat, 06 May 2023 07:49:00 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Technical]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=2616</guid>

					<description><![CDATA[A lot of sites and web shops I work with live in a Linux / Apache / php environment. In relaunches or cleanups, or just normal seo work, we have to use 301 redirects a lot. This is usually done easily with the .htaccess file or just a simple php file / tool with redirects....]]></description>
										<content:encoded><![CDATA[
<p>A lot of sites and web shops I work with live in a Linux / Apache / php environment. In relaunches or cleanups, or just normal <a href="https://jonathanbjorkskog.com/12-rules-for-seo">seo</a> work, we have to use 301 redirects a lot. This is usually done easily with the .htaccess file or just a simple php file / tool with redirects. But what happens when we are in a .NET enviroinment and want to do the same things?</p>



<h2 class="wp-block-heading">301 redirects in a .NET enviroinment</h2>



<p>In a .NET environment, you can achieve URL redirections using various methods, depending on your application&#8217;s architecture and requirements. Here are a few common ways to handle redirects in a .NET application:</p>



<h3 class="wp-block-heading">1. <strong>Using Web.config:</strong></h3>



<p>You can configure URL redirects directly in the <code>web.config</code> file using the <code>&lt;httpRedirect></code> element. Here&#8217;s an example of how you can redirect from one URL to another:</p>



<pre class="wp-block-code"><code>&lt;configuration>
  &lt;location path="old-page">
    &lt;system.webServer>
      &lt;httpRedirect enabled="true" destination="new-page" httpResponseStatus="Permanent" />
    &lt;/system.webServer>
  &lt;/location>
&lt;/configuration></code></pre>



<p>In this example, requests to <code>old-page</code> will be permanently redirected to <code>new-page</code>.</p>



<h3 class="wp-block-heading">2. <strong>Using Global.asax:</strong></h3>



<p>In your Global.asax file, you can handle redirects in the <code>Application_BeginRequest</code> event. Here&#8217;s an example:</p>



<pre class="wp-block-code"><code>void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.Path.ToLower() == "/old-page")
    {
        Response.RedirectPermanent("/new-page");
    }
}</code></pre>



<p>In this code, if the requested path is <code>/old-page</code>, it will be permanently redirected to <code>/new-page</code>.</p>



<h3 class="wp-block-heading">3. <strong>Using MVC Routing:</strong></h3>



<p>If you are using ASP.NET MVC, you can handle redirects in your <code>RouteConfig.cs</code> file. Here&#8217;s an example:</p>



<pre class="wp-block-code"><code>public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "OldPageRedirect",
            url: "old-page",
            defaults: new { controller = "Home", action = "NewPage" }
        );

        // ... other routes ...
    }
}</code></pre>



<p>In this example, requests to <code>/old-page</code> will be redirected to the <code>NewPage</code> action in the <code>HomeController</code>.</p>



<h3 class="wp-block-heading">4. <strong>Using IIS URL Rewrite Module:</strong></h3>



<p>If you are hosting your application on IIS, you can use the URL Rewrite module to set up redirects. This method provides a more powerful and flexible way to manage redirects.</p>



<p>You can create rewrite rules in the IIS Manager or by editing the <code>web.config</code> file directly. Here&#8217;s an example of a rewrite rule in the <code>web.config</code> file:</p>



<pre class="wp-block-code"><code>&lt;configuration>
    &lt;system.webServer>
        &lt;rewrite>
            &lt;rules>
                &lt;rule name="OldPageRedirect" stopProcessing="true">
                    &lt;match url="^old-page$" />
                    &lt;action type="Redirect" url="/new-page" redirectType="Permanent" />
                &lt;/rule>
            &lt;/rules>
        &lt;/rewrite>
    &lt;/system.webServer>
&lt;/configuration></code></pre>



<p>In this rule, requests to <code>/old-page</code> will be permanently redirected to <code>/new-page</code>.</p>



<p>Choose the method that best fits your application&#8217;s architecture and requirements. Each method has its advantages, so consider the specific use case and choose the one that suits you best.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Does page speed affect SEO?</title>
		<link>https://jonathanbjorkskog.com/does-page-speed-affect-seo</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Thu, 02 Jun 2022 10:10:46 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[SEO, Search engine optimization]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=1816</guid>

					<description><![CDATA[Google says it does. Here&#8217;s more info and how to speed it up!]]></description>
										<content:encoded><![CDATA[
<p>Google says it does. Here&#8217;s more info and how to speed it up!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What are Google Web Stories?</title>
		<link>https://jonathanbjorkskog.com/google-web-stories</link>
		
		<dc:creator><![CDATA[Jonathan]]></dc:creator>
		<pubDate>Wed, 05 May 2021 11:43:07 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress SEO]]></category>
		<guid isPermaLink="false">https://jonathanbjorkskog.com/?p=1672</guid>

					<description><![CDATA[Did you already notice these Instagram-like stories that are appearing on the web now? News sites and large bloggers are starting to use them, and Google have started to show these in the search results now. Do you feel that you might be missing out on this new feature of the web? Are you unsure...]]></description>
										<content:encoded><![CDATA[
<p>Did you already notice these <strong>Instagram-like stories</strong> that are <strong>appearing on the web now?</strong> News sites and large bloggers are starting to use them, and Google have started to show these in the search results now. </p>



<p>Do you feel that you might be missing out on this new feature of the web? Are you unsure where to start and if you actually can <strong>create these yourself</strong>? </p>



<p>Well, you might be missing out, we do not know yet how big this thing will become, but it looks like stories-format is here to stay at least. </p>



<p>And can you start doing stories yourself even if not being a videographer or developer? Definitely yes! And in this post we are going to look at what these web stories are and how to create them!</p>



<h2 class="wp-block-heading">What does a Web Story look like?</h2>



<p>Web Stories are <strong>portrait-mode full-screen visuals that work like pages in a book</strong>, with every page being visible for a few seconds. The difference to Social Media stories is that web stories can live forever on your site and Google. Let&#8217;s look at some examples of stories.</p>



<h3 class="wp-block-heading">Examples of Web Stories</h3>



<p>I&#8217;ve created a few stories. Here is one that you can check: </p>


		<div class="wp-block-web-stories-embed alignnone">
			<a href="https://jonathanbjorkskog.com/web-stories/<a href="https://jonathanbjorkskog.com/12-rules-for-seo">seo</a>-in-gif-totally-explained">
									<img
						src="https://jonathanbjorkskog.com/wp-content/uploads/2021/03/seo-gif-story.jpeg"
						width="360"
						height="600"
						alt="SEO in GIF - Totally explained"
																		loading="lazy"
						decoding="async"
					/>
								</a>
		</div>
		


<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link no-border-radius" href="https://jonathanbjorkskog.com/web-stories/seo-in-gif-totally-explained">SEO Explained in GIF (Play in Full Screen)</a></div>
</div>



<p> </p>



<p>Here is another: <strong>Official Story about how to make Web Stories</strong>:</p>


		<div class="wp-block-web-stories-embed alignnone">
			<a href="https://wp.stories.google/stories/creating-a-web-story-in-less-than-5-minutes-storytime/">
									<img
						src="https://wp.stories.google/stories/creating-a-web-story-in-less-than-5-minutes-storytime/assets/storytime_poster-640x853.jpg"
						width="360"
						height="600"
						alt="Creating a Web Story in Less Than 5 Minutes (Storytime)"
																		loading="lazy"
						decoding="async"
					/>
								</a>
		</div>
		


<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link no-border-radius" href="https://wp.stories.google/stories/creating-a-web-story-in-less-than-5-minutes-storytime/">Official Story about how to make stories</a></div>
</div>



<p>So, now you have an idea of what web stories look like. Both of these are made in the WordPress plugin for Web Stories (<a href="https://wordpress.org/plugins/web-stories/" target="_blank" rel="noreferrer noopener">The Stories Plugin</a>).</p>



<h2 class="wp-block-heading">Some short nerdy information about Web Stories:</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1614769333684"><strong class="schema-faq-question">How do I create a Web Story?</strong> <p class="schema-faq-answer">The easiest way to create web stories is to use one of the editors, for example, the WordPress plugin by Google if you have a WordPress site: <a href="https://wordpress.org/plugins/web-stories/" target="_blank" rel="noreferrer noopener">The Stories Plugin</a>. There are also other editors, for example; <a href="https://www.nws.ai/" target="_blank" rel="noreferrer noopener">News Room AI</a> or <a href="https://makestories.io/" target="_blank" rel="noreferrer noopener">MakeStories</a>. If you are a tech-savvy person you can also code stories yourself.</p> </div> <div class="schema-faq-section" id="faq-question-1614769214562"><strong class="schema-faq-question">What are Web Stories?</strong> <p class="schema-faq-answer">Web Stories are Google&#8217;s / Internets&#8217;s adaption to the popular stories format known from for example Instagram. Web stories lives on websites instead of social media apps, and are not disappearing after some time like social media stories are. Web stories can also appear in Google search and Google Discover. Web stories are also known as AMP Stories, Google Stories or Mobile Stories.</p> </div> <div class="schema-faq-section" id="faq-question-1614769535853"><strong class="schema-faq-question">Can Google index Web Stories?</strong> <p class="schema-faq-answer">Yes! If the story is made in the right way, tagged in the right way, linked to, and published on a site that allows indexing, Google will most likely index it. The good thing is that the most tools make sure that things are created in the right way out of the box.</p> </div> </div>



<h2 class="wp-block-heading">Creating your first Web Story</h2>



<div class="wp-block-uagb-how-to uagb-block-e6c61eb5"><script type="application/ld+json">{"@context":"https://schema.org","@type":"HowTo","name":"How to create your first Web Story","description":"To get started, it's easiest if you use the WordPress plugin. So before you start, make sure you have a WordPress site with the &lt;a href=\"https://wordpress.org/plugins/web-stories/\" target=\"_blank\" rel=\"noreferrer noopener\">Stories Plugin&lt;/a> installed. Have an idea in mind too of what you want to create, or grab an already existing blog post and think about how to recreate it into a story. The first story I made, &lt;a href=\"https://jonathanbjorkskog.com/web-stories/seo-in-gif-totally-explained\">SEO in GIF&lt;/a>, took about 1 h 20 min to create, so I use that as a benchmark.","image":{"@type":"ImageObject","url":"https://jonathanbjorkskog.com/wp-content/uploads/2021/05/Google-web-stories.jpeg","height":"406","width":"305"},"totalTime":"P0Y0M0DT1H20M","estimatedCost":{"@type":"MonetaryAmount","currency":" USD","value":"0"},"tool":[{"@type":"HowToTool","name":"- A Computer."}],"supply":[{"@type":"HowToSupply","name":"- WordPress"},{"@type":"HowToSupply","name":"- The Stories Plugin"},{"@type":"HowToSupply","name":"- An idea of what to make"},{"@type":"HowToSupply","name":"- A bunch of images that fit the topic"}],"step":[{"@type":"HowToStep","url":"#","name":"Step 1","text":"Open the stories plugin in WordPress, click \"create new story\"","image":""},{"@type":"HowToStep","url":"#","name":"Step 2","text":"Follow the step by step instruction for how&lt;a href=\"https://wp.stories.google/docs/#Getting-started\" target=\"_blank\" rel=\"noreferrer noopener\"> to use the Web Stories plugin found here&lt;/a>","image":""},{"@type":"HowToStep","url":"#","name":"Step 3","text":"Publish (and submit to Search Console if you want to see it indexed really fast)","image":""}]}</script><div class="uagb-how-to-main-wrap"><div class="uagb-howto__wrap"><h3 class="uagb-howto-heading-text">How to create your first Web Story</h3><p class="uagb-howto-desc-text">To get started, it&#8217;s easiest if you use the WordPress plugin. So before you start, make sure you have a WordPress site with the <a href="https://wordpress.org/plugins/web-stories/" target="_blank" rel="noreferrer noopener">Stories Plugin</a> installed. Have an idea in mind too of what you want to create, or grab an already existing blog post and think about how to recreate it into a story. The first story I made, <a href="https://jonathanbjorkskog.com/web-stories/seo-in-gif-totally-explained">SEO in GIF</a>, took about 1 h 20 min to create, so I use that as a benchmark.</p><div class="uagb-howto__source-wrap"><img decoding="async" class="uagb-howto__source-image" src="https://jonathanbjorkskog.com/wp-content/uploads/2021/05/Google-web-stories-620x310.jpeg" title="Google-web-stories"/></div><span class="uagb-howto__time-wrap"><h4 class="uagb-howto-timeNeeded-text">Total Time Needed :</h4><p class="uagb-howto-timeNeeded-value">1</p><p class="uagb-howto-timeINmin-text"> Hour </p><p class="uagb-howto-timeNeeded-value">20</p><p class="uagb-howto-timeINmin-text"> Minutes </p></span><span class="uagb-howto__cost-wrap"><h4 class="uagb-howto-estcost-text">Total Cost:</h4><p class="uagb-howto-estcost-value">0</p><p class="uagb-howto-estcost-type"> USD</p></span></div><div class="uagb-how-to-tools__wrap"><h4 class="uagb-howto-req-tools-text">Required Tools:</h4></div><div class="uagb-tools__wrap"><div class="uagb-how-to-tools-0 uagb-how-to-tools-child__wrapper"><div class="uagb-tools"><div class="uagb-tools__label">&#8211; A Computer.</div></div></div></div><div class="uagb-how-to-materials__wrap"><h4 class="uagb-howto-req-materials-text">Things Needed?</h4></div><div class="uagb-how-to-materials"><div class="uagb-how-to-materials-0 uagb-how-to-materials-child__wrapper"><div class="uagb-materials"><div class="uagb-materials__label">&#8211; WordPress</div></div></div><div class="uagb-how-to-materials-1 uagb-how-to-materials-child__wrapper"><div class="uagb-materials"><div class="uagb-materials__label">&#8211; The Stories Plugin</div></div></div><div class="uagb-how-to-materials-2 uagb-how-to-materials-child__wrapper"><div class="uagb-materials"><div class="uagb-materials__label">&#8211; An idea of what to make</div></div></div><div class="uagb-how-to-materials-3 uagb-how-to-materials-child__wrapper"><div class="uagb-materials"><div class="uagb-materials__label">&#8211; A bunch of images that fit the topic</div></div></div></div><div class="uagb-how-to-steps__wrap"><h4 class="uagb-howto-req-steps-text">Steps to create and publish the first web story:</h4><div class="uagb-howto-steps__wrap">
<div class="wp-block-uagb-info-box uagb-infobox__outer-wrap uagb-block-bfca0799"><a href="#" class="uagb-infobox-link-wrap uagb-infbox__link-to-all" target="_self" aria-label="Infobox Link" rel="noopener noreferrer"></a><div class="uagb-infobox__content-wrap  uagb-infobox_cta-type-all uagb-infobox uagb-infobox-has-image uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-tablet uagb-infobox-image-valign-top uagb-infobox-enable-border-radius "><div class="uagb-ifb-left-right-wrap"><div class="uagb-ifb-content"><div class="uagb-ifb-title-wrap"><h4 class="uagb-ifb-title">Step 1</h4></div><div class="uagb-ifb-text-wrap"><p class="uagb-ifb-desc">Open the stories plugin in WordPress, click &#8220;create new story&#8221;</p><div class="uagb-ifb-cta uagb-infobox-cta-link-style"></div></div></div></div></div></div>



<div class="wp-block-uagb-info-box uagb-infobox__outer-wrap uagb-block-6dfb40cd"><a href="#" class="uagb-infobox-link-wrap uagb-infbox__link-to-all" target="_self" aria-label="Infobox Link" rel="noopener noreferrer"></a><div class="uagb-infobox__content-wrap  uagb-infobox_cta-type-all uagb-infobox uagb-infobox-has-image uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-tablet uagb-infobox-image-valign-top uagb-infobox-enable-border-radius "><div class="uagb-ifb-left-right-wrap"><div class="uagb-ifb-content"><div class="uagb-ifb-title-wrap"><h4 class="uagb-ifb-title">Step 2</h4></div><div class="uagb-ifb-text-wrap"><p class="uagb-ifb-desc">Follow the step by step instruction for how<a href="https://wp.stories.google/docs/#Getting-started" target="_blank" rel="noreferrer noopener"> to use the Web Stories plugin found here</a></p><div class="uagb-ifb-cta uagb-infobox-cta-link-style"></div></div></div></div></div></div>



<div class="wp-block-uagb-info-box uagb-infobox__outer-wrap uagb-block-0f148b66"><a href="#" class="uagb-infobox-link-wrap uagb-infbox__link-to-all" target="_self" aria-label="Infobox Link" rel="noopener noreferrer"></a><div class="uagb-infobox__content-wrap  uagb-infobox_cta-type-all uagb-infobox uagb-infobox-has-image uagb-infobox-icon-left uagb-infobox-left uagb-infobox-stacked-tablet uagb-infobox-image-valign-top uagb-infobox-enable-border-radius "><div class="uagb-ifb-left-right-wrap"><div class="uagb-ifb-content"><div class="uagb-ifb-title-wrap"><h4 class="uagb-ifb-title">Step 3</h4></div><div class="uagb-ifb-text-wrap"><p class="uagb-ifb-desc">Publish (and submit to Search Console if you want to see it indexed really fast)</p><div class="uagb-ifb-cta uagb-infobox-cta-link-style"></div></div></div></div></div></div>
</div></div></div></div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Page Caching using Disk: Enhanced{w3tc_pagecache_reject_reason}
Lazy Loading (feed)
Minified using Disk

Served from: jonathanbjorkskog.com @ 2026-01-28 08:33:01 by W3 Total Cache
-->