<?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>Web Archives - FODINA 4 FOSS</title>
	<atom:link href="https://fodina.de/category/foss/web/feed/" rel="self" type="application/rss+xml" />
	<link>https://fodina.de/category/foss/web/</link>
	<description>a treasure trove for free software, techniques, and ideas</description>
	<lastBuildDate>Mon, 13 May 2024 10:19:33 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>Customized Colors With bootScore</title>
		<link>https://fodina.de/customized-colors/</link>
					<comments>https://fodina.de/customized-colors/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 08 May 2024 17:04:11 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=7797</guid>

					<description><![CDATA[<p>As a “powerful, free Bootstrap starter theme for WordPress”, bootScore uses the color concept of Bootstrap by marking up its elements accordingly. Consequently, each bootScore instance initially starts with the same outfit. However, it also offers techniques to modify the default design so that a web designer can define and implement her customized colors in [&#8230;]</p>
<p>The post <a href="https://fodina.de/customized-colors/">Customized Colors With bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As a “powerful, free Bootstrap starter theme for WordPress”, <a href="https://bootscore.me/">bootScore</a> uses <a href="https://getbootstrap.com/docs/5.0/utilities/colors/">the color concept of Bootstrap</a> by marking up its elements accordingly. Consequently, each bootScore instance initially starts with the same outfit. However, it also offers techniques to modify the default design so that a web designer can define and implement her customized colors in and with bootScore:<span id="more-7797"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/farbkonzept">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li><strong>Define the appearance of your site</strong>.</li>



<li><strong>Select the appropriate Bootstrap color clusters</strong>.</li>



<li><strong>Rewrite the function colors accordingly</strong>.</li>



<li><strong>Define your own CSS classes according to our goals</strong>.</li>



<li><strong>Assign these classes to the intended elements of your site</strong>.</li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p><a href="https://getbootstrap.com/docs/5.1/customize/color/">Bootstrap has divided the RGB color space into 10 color clusters</a>: Blau (<code class="bsblue">blue</code>), Indigo (<code class="bsindigo">indigo</code>), Violett (<code class="bspurple">purple</code>), Rosa (<code class="bspink">pink</code>), Rot (<code class="bsred">red</code>), Orange (<code class="bsorange">orange</code>), Gelb (<code class="bsyellow">yellow</code>), Grün (<code class="bsgreen">green</code>), Petrol (<code class="bsteal">teal</code>), Cyan (<code class="bscyan">cyan</code>), Grau (<code class="bsgray">gray</code>).Blue (<code>blue</code>), Indigo (<code>indigo</code>), Violet (<code>purple</code>), Pink (<code>pink</code>), Red (<code>red</code>), Orange (<code>orange</code>), Yellow (<code>yellow</code>), Green (<code>green</code>), Petrol (<code>teal</code>), Cyan (<code>cyan</code>), Gray (<code>gray</code>). 

Each cluster starts with a corresponding light color and goes 9 steps up to a corresponding almost black color. The colors are defined as SASS variables, following the same pattern for each cluster. For example, we can access a 

<code class="cdg100">$green-100</code>, <code class="cdg200">$green-200</code>, <code class="cdg300">$green-300</code>, <code class="cdg400">$green-400</code>, <code class="cdg500">$green-500</code>, <code class="cdg600">$green-600</code>, <code class="cdg700">$green-700</code>, <code class="cdg800">$green-800</code>, <code class="cdg900">$green-900</code>, where <code class="cdg">$green</code> corresponds to the color <code class="cdg500">$green-500</code>.</p>



<p>If we want to use these colors in one of our elements, we define a CSS class like <code>.cdg600 { color: $green-600; }</code> in our child theme file <code>scss/bscore_custom.scss</code> and assign it to the intended HTML element as herein <code class="cdg600">&lt;code class="cdg600"&gt;$green-600&lt;/code&gt;</code>. Although this technique narrows the RGB color space, it makes it easier for us to create color-differentiated yet coordinated themes.</p>



<p>In addition to <a href="https://getbootstrap.com/docs/5.2/utilities/colors/">the purely technical color treatment</a>, Bootstrap also breaks new ground conceptually: There would be — so the idea — cross-site communicative tasks that are (can be) performed by different elements of a site. Bootstrap allows you to assign typical “functional colors” to these functional elements. Eventually, the web designer decides which elements of a site take on which function — and assigns them the corresponding “functional color”.</p>



<p>Specifically, Bootstrap assumes that there are typically (several) elements in sites that signal success, deter, warn, or inform. Or that there are primary, secondary, or tertiary elements<sup><a href="https://fodina.de/customized-colors/#footnote_0_7797" id="identifier_0_7797" class="footnote-link footnote-identifier-link" title="which probably refer to different degrees of importance">1</a></sup>, dark or light elements. Bootstrap defines ‘functional colors’ for these cross-page communicative functions. The corresponding <a href="https://getbootstrap.com/docs/5.1/customize/color/">Bootstrap-color-Howto</a> shows the default assignment of these ‘functional colors’.</p>



<p>Hence, a Bootstrap-based theme only needs to mark up its elements according to the intended functions with the associated CSS classes to implement a minimal consistent color concept. This is provided by <em>bootScore</em>. However, it uses the default function colors of <em>Bootstrap</em>. Ultimately, this results in a rather ‘colorful’ color concept. However, we can align the colors by overwriting CSS definitions of the ‘function classes’ and thus transferring the conceptually appropriate color to all correspondingly marked elements. Bootscore <a href="https://bootscore.me/documentation/theme/bootstrap-css-sass/">demonstrates this approach</a> by switching the primary color from <em>blue</em> to <em>red</em> — with the help of the ‘command’ <code>$primary:#FF0000;</code> in the file <code>bscore_variables.scss</code>.</p>



<p>However, we have to explicitly assign the value of the desired color instead of using one of the variables from the color clusters defined by Bootstrap. That’s not what we actually want. Intuitively we would write <code>$primaty:$red;</code>. Unfortunately, that is not possible because the bootScore file <code>bscore_variables.scss</code> is loaded before the corresponding Bootstrap file.<sup><a href="https://fodina.de/customized-colors/#footnote_1_7797" id="identifier_1_7797" class="footnote-link footnote-identifier-link" title="bootScore says that by doing so it follows the Bootstrap guideline.">2</a></sup> Thus, for customizing the functional colors defined by Bootstrap and used by bootScore, we need to overwrite the existing definitions where we explicitly use the values of the intended cluster colors. To do that, we use our file <em>bscore_variables.scss</em> in our child theme.</p>



<p>However, redefining a function color implicitly also adjusts the dependent colors: If we set the primary color to red, the links become red, the background color of the badges becomes a lighter red, and their link text a darker red. But, bootScore ‘only’ passes the decisions of Bootstrap through.<sup><a href="https://fodina.de/customized-colors/#footnote_2_7797" id="identifier_2_7797" class="footnote-link footnote-identifier-link" title="Moreover, asked which element has got which function, bootScore recommends trying it out.">3</a></sup></p>



<p>As compensation, we can then use all the predefined Bootstrap variables in our own CSS definitions we gather in our bootScore file <code>bscore_custom.scss</code>. Moreover: we can assign the CSS classes predefined by Bootstrap <code>(text|bg|...)-(primary|secondary|...|danger|...'</code> directly to our HTML elements for functionally coloring them according to our concept. And even further and finer: In our file <code>bscore_custom.scss</code>, we can also overwrite existing classes — such as the CSS class <code>card</code> by SASS-oriented definitions in the command <code>card { backgroundcolor: var(--#{$prefix}dark);</code> to get a black background.<sup><a href="https://fodina.de/customized-colors/#footnote_3_7797" id="identifier_3_7797" class="footnote-link footnote-identifier-link" title="or however we've defined the function color 'dark'">4</a></sup> This would ‘darken’ all the cards in our overview file.<sup><a href="https://fodina.de/customized-colors/#footnote_4_7797" id="identifier_4_7797" class="footnote-link footnote-identifier-link" title="Admittedly, this could also be done more simply, namely with the statement .card { backgroundcolor: $dark}">5</a></sup></p>



<p>However, because we often don’t want to change all the elements that are marked with predefined classes, we end up using the traditional method again: we define new classes, using colors from the bootstrap clusters, and then assign them to the elements we intend to use in the templates. And how do we find these? By studying the source code of our previous bootscore pages — and trying things out.</p>



<p>To make a long story short: For creating a unified color concept, we must</p>



<ol class="wp-block-list">
<li><strong>define our design goals</strong> — for example:
















<ul class="wp-block-list">
<li>The site should appear green-white-grey. =&gt; To get that, add to your file <code>bscore_custom.scss</code>
<ul class="wp-block-list">
<li><code>$primary: #146c43; // $green-600</code></li>



<li><code>$secondary: #6c757d; // predefined value of $gray-600</code></li>



<li><code>$info: #0d6efd; // predefined value of $blue-500</code></li>
</ul>
</li>



<li>Prominent elements should appear purple (or dark red). =&gt; To get that, add to your file <code>bscore_custom.scss</code>
<ul class="wp-block-list">
<li><code>$danger: #520dc2; // predefined value of $indigo-600</code></li>



<li><code>$warning: #8540f5; // predefined value of $indigo-400</code></li>



<li><code>$success: #20c997; // predefined value of $teal-500</code></li>
</ul>
</li>



<li>Secondary text should be legibly grayed out.</li>



<li>The white article teasers should have a faint green border. =&gt; To get that, add to your file <code>bscore_custom.scss</code>
<ul class="wp-block-list">
<li><code>.card { border-color: $green-600; }</code></li>
</ul>
</li>



<li>The teaser cards on our landing page should be presented on a slightly green background. =&gt; To get that, add to your file <code>bscore_custom.scss</code>

<ul class="wp-block-list">
<li><code>.page-template-mylap , .hfeed { background-color: $blue-100;}</code></li>
</ul>
</li>



<li>The header and footer should continue to be gray, as it is by default designed by bootScore</li>
</ul>



</li><li><strong>select the Bootstrap color clusters</strong> we want to use (here: the clusters blue, purple, and <em>grey</em>).</li>



<li><strong>rewrite the functional colors accordingly</strong> — in our <code>bscore_variables.scss</code> file.<sup><a href="https://fodina.de/customized-colors/#footnote_5_7797" id="identifier_5_7797" class="footnote-link footnote-identifier-link" title="as shown in the table">6</a></sup></li>



<li><strong>define your own CSS classes according to our goals</strong> — in our <code>bscore_custom.scss</code> file.</li>



<li><strong>assign these classes to the intended elements of your site</strong>.<sup><a href="https://fodina.de/customized-colors/#footnote_6_7797" id="identifier_6_7797" class="footnote-link footnote-identifier-link" title="as described above">7</a></sup></li>

</ol>



<figure class="wp-block-table" align="center"><table><tbody>
  <tr><td class="bg-primary"><span class="text-white">CSS-class: bg-primary</span></td>
  <td><span class="text-primary">CSS-class: text-primary</span></td>
</tr>
  <tr><td class="bg-secondary"><span class="text-white">CSS-class: bg-secondary</span></td>
<td><span class="text-secondary">CSS-class: text-secondary</span></td>
</tr>

  <tr><td class="bg-success"><span class="text-white">CSS-class: bg-success</span></td>
<td><span class="text-success">CSS-class: text-success</span></td>
</tr>
  <tr><td class="bg-info"><span class="text-white">CSS-class: bg-info</span></td>
<td><span class="text-info">CSS-class: text-info</span></td>
</tr>
  <tr><td class="bg-warning"><span class="text-white">CSS-class: bg-warning</span></td>
<td><span class="text-warning">CSS-class: text-warning</span></td>
</tr>
  <tr><td class="bg-danger"><span class="text-white">CSS-class: bg-danger</span></td>
<td><span class="text-danger">CSS-class: text-danger</span></td>
</tr>
  <tr><td class="bg-dark"><span class="text-white">CSS-class: bg-dark</span></td>
<td><span class="text-dark">CSS-class: text-dark</span></td>
</tr>
  <tr><td class="bg-light"><span class="text-black">CSS-class: bg-light</span></td>
<td class="bg-dark"><span class="text-light">CSS-class: text-light</span></td>
</tr>
</tbody></table></figure>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>? Well,
  once started with <a href="/pimp-your-bootscore/">improving</a> the
  <a href="/speed-up-images">image handling</a>, a web designer will 
  also notice the <a href="/blurred-featured-images/">blurred ‘featured images’</a> 
  of bootScore. She will <a href="/larger-image-squares/">try</a> and 
  <a href="/less-blurred-images/">refine</a> solutions. And she may also tackle them 
  <a href="/without-any-blurred-images/">with new HTML‑5 techniques</a>. Because with 
  that, <a href="/image-databases/">a fancier image strategy</a> combined 
  with <a href="/picture-credit-page/">an integrated license fulfillment process</a>
  and its own <a href="/logos-and-favicons/">logo</a> will really make sense.
  However, pictures bring colors to reading. So they should be integrated into 
  <a href="}/color-concept">a customized color concept</a>. 
  This post also contributes something to this topic.
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<ol class="footnotes"><li id="footnote_0_7797" class="footnote">which probably refer to different degrees of importance</li><li id="footnote_1_7797" class="footnote">bootScore says that by doing so it follows the Bootstrap guideline.</li><li id="footnote_2_7797" class="footnote">Moreover, asked which element has got which function, bootScore recommends trying it out.</li><li id="footnote_3_7797" class="footnote">or however we’ve defined the function color ‘dark’</li><li id="footnote_4_7797" class="footnote">Admittedly, this could also be done more simply, namely with the statement <code>.card { backgroundcolor: $dark}</code></li><li id="footnote_5_7797" class="footnote">as shown in the table</li><li id="footnote_6_7797" class="footnote">as described above</li></ol><p>The post <a href="https://fodina.de/customized-colors/">Customized Colors With bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/customized-colors/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cookies — properly managed by bootScore</title>
		<link>https://fodina.de/properly-managed-cookies/</link>
					<comments>https://fodina.de/properly-managed-cookies/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 04 Oct 2023 19:01:35 +0000</pubDate>
				<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=7709</guid>

					<description><![CDATA[<p>Displaying an appropriate cookie dialog is one thing. Giving it a real meaning is another. Because asking permission alone is not enough. We also need to evaluate the responses: We must only store those cookies on our reader’s computers they — or the law — have consented to. A JavaScript function that implements this requirement [&#8230;]</p>
<p>The post <a href="https://fodina.de/properly-managed-cookies/">Cookies — properly managed by bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Displaying an appropriate cookie dialog is one thing. Giving it a real meaning is another. Because asking permission alone is not enough. We also need to evaluate the responses: We must only store those cookies on our reader’s computers they — or the law — have consented to. A JavaScript function that implements this requirement sets the semantics of the cookie dialog. Based on such a function, we use properly managed cookies.<span id="more-7709"></span></p>



<p>The plugin <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bs-cookie-settings</a> itself only provides us with the cookie query. <a href="https://fodina.de/properly-used-cookies/">How to activate this</a>, I had already described in a previous post. However, the bootScore developers leave the implementation of the corresponding semantics to the <a href="https://github.com/orgs/bootscore/discussions/559">respective web designer</a>. Here is a variant that can be freely reused:</p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/sauberes-cookie-management">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>Download the <a href="https://github.com/js-cookie/js-cookie">JS cookie library</a> from <a href="https://www.cdnpkg.com/js-cookie/file/js.cookie.min.js/">cdnpkg.com</a> (or wherever) and place it (unpacked) under the name   <code>js/js.cookie.min.js</code>  into your child-theme folder.</li>



<li>In your file <code>functions.php</code> extend the function <code>bootscore_child_enqueue_styles()</code> by the line</li>
</ul>



<pre class="wp-block-code"><code>wp_enqueue_script('js-cookie',get_stylesheet_directory_uri().'/js/js-cookie-min.js', false, '', true););</code></pre>



<ul class="wp-block-list">
<li>Expand the file <code>js/custom.js</code> of your child theme in the following manner:</li>
</ul>



<pre class="wp-block-code"><code>jQuery(function ($) {

  $(document).ready(function(){
    const bsCookieSettings='bs_cookie_settings';
    const analytics = 'analytics';
    const advertising = 'advertising';
    const analyticDemoCookie='bsAnalyticCookie';
    const advertisingDemoCookie='bsAdvertisingCookie';
    const necessaryDemoCookie='bsNecessaryCookie';
    const demoCookieValue='demo-cookie';

    // alert("adding cookie writing algorithm");
    const bsv=Cookies.get(bsCookieSettings);
    if (bsv) {
      const allowedCookies=JSON.parse(bsv);
      // alert(allowedCookies.level);

      if (allowedCookies.level.includes(analytics)) {
        // alert("writing analytic cookies");
        if (!(Cookies.get(analyticDemoCookie))) { 
          Cookies.set(analyticDemoCookie, demoCookieValue, { expires: 100, path: '/' });
        };
      };
      if (allowedCookies.level.includes(advertising)) { 
        // alert("writing advertising cookies"); 
        if (!(Cookies.get(advertisingDemoCookie))) { 
          Cookies.set(advertisingDemoCookie, demoCookieValue, { expires: 10, path: '/' });
        };
      };
      // alert("writing necessary cookies"); 
      if (!(Cookies.get(necessaryDemoCookie))) { 
        Cookies.set(necessaryDemoCookie, demoCookieValue, { expires: 14, path: '/' });
      };
    };
  });

  // Do your other stuff here

}); // jQuery End</code></pre>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p>We could set and <a href="https://www.w3schools.com/js/js_cookies.asp">evaluate cookies with native JavaScript</a>. Nevertheless, it’s easier with ready-made libraries. WordPress already <a href="https://wpengine.com/resources/how-to-add-jquery-wordpress-theme/">brings jQuery with it</a>. For using that, bootScore offers us <a href="https://bootscore.me/documentation/bootscore-child/#JavaScript">a way to add custom JavaScript/jQuery functions</a> to our bootScore child theme.</p>



<p>There used to be a <a href="https://plugins.jquery.com/cookie">real jQuery-Cookie-Plugin</a> for cookie management. This has since been archived and migrated to <a href="https://github.com/js-cookie/js-cookie">an independent js-cookie-JavaScript</a> library. To use that, we must <a href="https://www.cdnpkg.com/js-cookie/file/js.cookie.min.js/">download it</a> and place it into the JavaScript folder of our child theme — under the name <code>js/js.cookie.min.js</code>. As described above, we also must enforce the function <code>bootscore_child_enqueue_styles()</code> of our file <code>functions.php</code> to load that library.</p>



<p>Eventually, we should implement an algorithm for evaluating the cookie settings by expanding the file <code>js/custom.js</code>.  That algorithm should work like this:</p>



<ul class="wp-block-list">
<li>First, we try to read the cookie bootScore-Cookie-plugin stores under the name <code>bs_cookie_settings</code>.</li>



<li>If it doesn’t exist yet, our reader hasn’t agreed to use cookies. So we are not allowed to write any yet.<sup><a href="https://fodina.de/properly-managed-cookies/#footnote_0_7709" id="identifier_0_7709" class="footnote-link footnote-identifier-link" title="Yes, formally we may write the technically necessary cookies without our reader's consent. But before we do that, we must inform her that we are going to do so. And the only way to convince ourselves that she has indeed read it is to wait for the written cookie.">1</a></sup></li>



<li>Once our reader has ‘confirmed’ the cookie dialog to whatever extent, the bs cookie plugin stores the cookie <code>bs_cookie_settings</code>. Its value contains a JSON object:</li>
</ul>



<pre class="wp-block-code"><code>{  "level": 
    [   "necessary",
        "analytics",
        "advertising"
    ],
    "revision":0,
    "data":null,
    "rfc_cookie":false
}</code></pre>



<ul class="wp-block-list">
<li>Thus, we must parse that JSON object before we can — on the JavaScript level — access the list of allowed cookie groups via <code>allowedCookies.level</code> and use the method <code>includes</code> of a list object to query which of the cookie groups <em>necessary</em>, <em>analytics, </em>and /or <em>advertising </em>our reader has allowed us to write.</li>



<li>And for each allowed group we now may write the corresponding cookies.<sup><a href="https://fodina.de/properly-managed-cookies/#footnote_1_7709" id="identifier_1_7709" class="footnote-link footnote-identifier-link" title="whereby we refer to the legal permission for the technically necessary cookies">2</a></sup></li>
</ul>



<p>And a last hint: JavaScript modifies pages dynamically. But the cache stores the respective results. Thus, sometimes it’s helpful if we delete the cache for getting the results of our modifications run.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="http://fodina.de/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>? Well,
  besides her <a href="http://fodina.de/pimp-your-bootscore/">normal design work</a>,
  the web-designer must deal with some legal requirements, as — for example — 
  those of the <a href="http://fodina.de/privacy-dsgvo/">DSGVO privacy</a>, of having a 
  <a href="http://fodina.de/properly-used-cookies/">cookie consent dialog</a> 
  and the respective <a href="http://fodina.de/properly-managed-cookies/">semantic</a>, 
  of having a <a href="http://fodina.de/ds-compliance/">data privacy page</a>,
  an <a href="http://fodina.de/imprint/">imprint</a>, 
  an <a href="http://fodina.de/picture-credits/">image reference page</a>, and
  a <a href="http://fodina.de/foss-compliance/">FOSS compliance page</a>.
  This post shall support you to manage your legal issues. 
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<ol class="footnotes"><li id="footnote_0_7709" class="footnote">Yes, formally we may write the technically necessary cookies without our reader’s consent. But before we do that, we must inform her that we are going to do so. And the only way to convince ourselves that she has indeed read it is to wait for the written cookie.</li><li id="footnote_1_7709" class="footnote">whereby we refer to the legal permission for the technically necessary cookies</li></ol><p>The post <a href="https://fodina.de/properly-managed-cookies/">Cookies — properly managed by bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/properly-managed-cookies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cookies — properly used in bootScore</title>
		<link>https://fodina.de/properly-used-cookies/</link>
					<comments>https://fodina.de/properly-used-cookies/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Fri, 15 Sep 2023 10:03:01 +0000</pubDate>
				<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=7616</guid>

					<description><![CDATA[<p>Without permission, we may not write cookies to the hard disk of our reader. Because it belongs to her, not to us. By accessing our site, she has already implicitly given her consent to store our technically necessary cookies. Because they are technically necessary to read our post. But she must explicitly permit us to [&#8230;]</p>
<p>The post <a href="https://fodina.de/properly-used-cookies/">Cookies — properly used in bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.cookiebot.com/en/cookie-law/">Without permission, we may not write cookies to the hard disk of our reader</a>. Because it belongs to her, not to us. By accessing our site, she has already implicitly given her consent to store our technically necessary cookies. Because they are technically necessary to read our post. But she must explicitly permit us to save the other cookies on her computer before we are going to do so. Moreover, we must have enabled her to query what these cookies are for before we offer her to answer our request. That’s the meaning if we talk about properly used cookies.<span id="more-7616"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/saubere-cookie-nutzung">de</a> ]</div></div></div></div>



<p>For this, <a href="https://bootscore.me/">bootScore</a> offers us a configurable <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">cookie approval dialogue</a> evaluated by the <a href="https://bootscore.me/#download">bsCookie-plugin</a>:</p>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>Download <a href="https://bootscore.me/#download">bsCookie</a>.</li>



<li>Install the zip file via the plugin management of your WordPress backend.</li>



<li>Determine the cookies you want to install on your reader’s computer.<sup><a href="https://fodina.de/properly-used-cookies/#footnote_0_7616" id="identifier_0_7616" class="footnote-link footnote-identifier-link" title="We have to keep in mind that our plugins can also try to store cookies. So it's not enough to just look for the corresponding JavaScript commands in our own posts and pages">1</a></sup></li>



<li>Assign each of these cookies to one of the groups ‘necessary’<sup><a href="https://fodina.de/properly-used-cookies/#footnote_1_7616" id="identifier_1_7616" class="footnote-link footnote-identifier-link" title="Cookies that we assign to this group will lastly be placed on our reader's hard drive even without explicit consent, precisely because they are technically necessary. So we must be able to prove if necessary that these cookies are indeed technically necessary.">2</a></sup>, ‘advertising’ or ‘analytics’.</li>



<li>In the dialog ‘Appearance/Widgets’ drag a widget ‘Customer HTML’ into the widget group <em>Footer‑4</em>.</li>



<li>Enter the script lines into that sub-widget as offered by <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bsCookie documentation</a>.</li>



<li>For each of your plugins add an entry into the corresponding section.</li>



<li>Link your privacy page into the dialog by replacing <em>#yourprivacypolicy</em> accordingly.</li>



<li>Translate the texts into the language of your site (or create an additional entry according to your multilingual strategy).</li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p>Asking for permission to write cookies via a dialogue is only one side of the coin. Cookies can also store (personal) (identification) data. So, the respective web server can ask for that information and hand it over to third parties. Hence, we must mention such cookies in our <a href="https://fodina.de/ds-compliance/">data protection concept</a> additionally. To enable our readers to call this page directly from the cookie consent dialogue, the <em>bsCookie</em> dialogue text contains a link whose value <em>#yourprivacypolice</em> we should aling accordingly.</p>



<p>It has become a good tradition to group cookies functionally and to ask once for the complete group whether we may file the respective cookies. That’s legally not necessary: We could also let the use of cookies agree or disagree quite generally.<sup><a href="https://fodina.de/properly-used-cookies/#footnote_2_7616" id="identifier_2_7616" class="footnote-link footnote-identifier-link" title="However, greater granularity is in our interest. Because if a reader doesn't want one thing - e.g. advertising - she could still allow the other - e.g. analytics. That way, we would still learn at least a part of what we hoped to learn overall.">3</a></sup> Or we could make every single cookie selectable or deselectable — which would overload the dialogue.</p>



<p>However, at first, we need to know which cookies our site writes and what the cookies actually do. Our browsers can support us. For example, by means of its ‘Privacy and Security’ dialog. Or with the help of a browser plugin<sup><a href="https://fodina.de/properly-used-cookies/#footnote_3_7616" id="identifier_3_7616" class="footnote-link footnote-identifier-link" title="e.g. with the Cookie Editor">4</a></sup>, which shows directly for each called site/page, which cookies have been written by it. But what our cookies do, we have to determine separately.</p>



<p>Once we have grouped our cookies functionally, we only need to create the appropriate groups as sections in the bsCookie dialog. Then we must insert for each cookie — associated with that group — an entry in the respective section. For the three common groups ‘necessary’, ‘advertising’, and ‘analytics’ <em>bsCookie</em> already provides the respective code. If these groups fit our needs, it is sufficient for us  to describe the cookies in and with the single entries. Assuming we wanted to get permission to write the three cookies <em>necessaryBsCookie</em>, <em>advertisingBsCookie</em>, and <em>analizingBsCookie</em>, the JavaScript code of the bsCookie consent dialogue should look like this:</p>



<pre class="wp-block-code"><code>&lt;script&gt;
  // Init
  window.addEventListener('load', function () {

    // obtain plugin
    var cc = initCookieConsent();

    // run plugin with your configuration
    cc.run({
      current_lang: 'en',
      autoclear_cookies: true,
      page_scripts: true,

      languages: {
        'en': {
          consent_modal: {
            title: 'Cookie Consent Request',
            description: 
'We use cookies to remember and reuse your preferences for future visits. By clicking “Accept all”, you permit us to use all cookies, technically necessary as well as functionally helpful. By clicking “necessary only”, you forbid us to use the functionally helpful, but technically not necessary cookies. For a more detailed consent, visit &lt;a data-bs-toggle="modal" href="#bs-cookie-modal"&gt;Cookie Settings&lt;/a&gt;.',
            primary_btn: {
              text: 'accept all',
              role: 'accept_all'
            },
            secondary_btn: {
              text: 'necessary only',
              role: 'accept_necessary'
            }
          },

          settings_modal: {
            title: 'Cookie settings',
            save_settings_btn: 'Save settings',
            accept_all_btn: 'accept all',
            reject_all_btn: 'necessary only',
            close_btn_label: 'close',
            cookie_table_headers: [
              { col1: 'Name' },
              { col2: 'Domain' },
              { col3: 'Expiration' },
              { col4: 'Description' }
            ],
            blocks: [
              {
                title: 'Cookie usage',
                description: 
'We use cookies to provide core website functions and to enhance your reading experience. For each category, you can choose to use them or not. For more details about cookies and other sensitive data, please read our &lt;a href="https://karsten-reincke.de/datenschutz"&gt;Privacy Policy&lt;/a&gt;.'
              }, {
                title: 'Necessary',
                description: 
'These cookies are essential for our website. Without them, the website would not work properly',
                toggle: {
                  value: 'necessary',
                  enabled: true,
                  readonly: true          // cookie categories with readonly=true are all treated as "necessary cookies"
                },
                cookie_table: [
                  {
                    col1: 'bs_cookie_settings',
                    col2: 'bootScore.me',
                    col3: 'deleted if your session becomes invalid',
                    col4: 
'cookie into which bootScore and the plugin bsCookies stores your cookie preferences',
                    is_regex: false
                  },
                  {
                    col1: 'nec­es­saryB­sCook­ie', 
                    col2: 'https://karsten-reincke.de',
                    col3: 'next 100 days',
                    col4: 'demo cookie of "pimp your BootScore"',
                    is_regex: false
                  },                 
                ]
              }, {
                title: 'Analytics',
                description: 
'These cookies allow the website to remember the choices you have made in the past',
                toggle: {
                  value: 'analytics',     // your cookie category
                  enabled: false,
                  readonly: false
                },
                cookie_table: [           // list of all expected cookies
                  {
                    col1: 'anal­iz­ing­B­sCook­ie',         
                    col2: 'https://karsten-reincke.de',
                    col3: 'next 10 Days',
                    col4: 'demo cookie of "pimp your BootScore"',
                    is_regex: false
                  }
                ]
              }, {
                title: 'Advertising',
                description: 
'These cookies collect information about how you use the website, which pages you visited and which links you clicked on. All data is anonymized and cannot be used to identify you',
                toggle: {
                  value: 'advertising',
                  enabled: false,
                  readonly: false
                },
                cookie_table: [             // list of all expected cookies
                  {
                    col1: 'adver­tis­ing­B­sCook­ie',
                    col2: 'https://karsten-reincke.de',
                    col3: '2 weeks',
                    col4: 'demo cookie of pimp your BootScore',
                    is_regex: false
                  }
                ]
              }, {
                title: 'More information',
                description: 
'For further questions concerning our data management, feel free to &lt;a href="https://karsten-reincke.de/impressum"&gt;contact us&lt;/a&gt;.',
              },

            ]
          }

        }
      }

    });
  });
&lt;/script&gt;</code></pre>



<p>Entering the information into the code of the cookie consent dialogue is one thing. Activating the code is another. To do that, we put the customized <em><a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bs-cookie-settings</a></em> JavaScript code into a <em>Custom HTML element</em> that we added to the <em>Footer 4</em> widget. In principle, we could embed the <em>Custom HTML element</em> in other widgets as well. However, <em>bsCookie</em> suggests <em>Footer 4</em> because the JavaScript code should be embedded at the end of a page. Anyway, all pages using a template containing the  <em>Footer 4</em> widget will then display the cookie. That’s the method of how we solve the problem of ‘deep links’.<sup><a href="https://fodina.de/properly-used-cookies/#footnote_4_7616" id="identifier_4_7616" class="footnote-link footnote-identifier-link" title="We must keep in mind that our readers could directly call links to deeper embedded pages. Even in this case, we may only write cookies, if we are allowed to do so.">5</a></sup></p>



<p>That left us with three final tasks:</p>



<ul class="wp-block-list">
<li>First, we will often want to linguistically customize our consent dialogue as well. For that purpose, we can modify the JavaScript code mentioned above.</li>



<li>Secondly, the dialog color is determined by the definition of the <a href="https://fodina.de/customized-colors/">functional color</a> $warning. Those who nevertheless want to customize the dialog may use her file  &lt;code&gt;_bscore_custom.scss&lt;/code&gt;: <pre class="wp-block-code"><code><br>// design the bsCookie-Dialog<br>#c-inr {<br>  border-color: darkblue;<br>  border-width: 2px;<br>  border-style: solid;<br>  background-color: #eef;<br>  color: blue($color: #000000);<br>  padding: 5px;<br>}<br><br>#c-p-bn {<br>  border-color: darkblue;<br>}<br><br>#c-s-bn {<br>  border-color: darkblue;<br>}<br> <br></code></pre></li>



<li>Third, we need to implement the semantics of the cookie consent dialog. If we want to walk the talk, we need to implement our ‘storing the cookie JavaScript code’ in a way that it writes only the technically necessary cookies without consent, and that it otherwise stores only the cookies from the groups for which there is consent.</li>
</ul>



<p>I will take up this last point in a separate post …</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="http://fodina.de/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>? Well,
  besides her <a href="http://fodina.de/pimp-your-bootscore/">normal design work</a>,
  the web-designer must deal with some legal requirements, as — for example — 
  those of the <a href="http://fodina.de/privacy-dsgvo/">DSGVO privacy</a>, of having a 
  <a href="http://fodina.de/properly-used-cookies/">cookie consent dialog</a> 
  and the respective <a href="http://fodina.de/properly-managed-cookies/">semantic</a>, 
  of having a <a href="http://fodina.de/ds-compliance/">data privacy page</a>,
  an <a href="http://fodina.de/imprint/">imprint</a>, 
  an <a href="http://fodina.de/picture-credits/">image reference page</a>, and
  a <a href="http://fodina.de/foss-compliance/">FOSS compliance page</a>.
  This post shall support you to manage your legal issues. 
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<ol class="footnotes"><li id="footnote_0_7616" class="footnote">We have to keep in mind that our plugins can also try to store cookies. So it’s not enough to just look for the corresponding JavaScript commands in our own posts and pages</li><li id="footnote_1_7616" class="footnote">Cookies that we assign to this group will lastly be placed on our reader’s hard drive even without explicit consent, precisely because they are technically necessary. So we must be able to prove if necessary that these cookies are indeed technically necessary.</li><li id="footnote_2_7616" class="footnote">However, greater granularity is in our interest. Because if a reader doesn’t want one thing — e.g. advertising — she could still allow the other — e.g. analytics. That way, we would still learn at least a part of what we hoped to learn overall.</li><li id="footnote_3_7616" class="footnote">e.g. with the <a href="https://cookie-editor.cgagnier.ca/">Cookie Editor</a></li><li id="footnote_4_7616" class="footnote">We must keep in mind that our readers could directly call links to deeper embedded pages. Even in this case, we may only write cookies, if we are allowed to do so.</li></ol><p>The post <a href="https://fodina.de/properly-used-cookies/">Cookies — properly used in bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/properly-used-cookies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>My Googlized Writing Style</title>
		<link>https://fodina.de/writing-style/</link>
					<comments>https://fodina.de/writing-style/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sun, 27 Aug 2023 08:39:56 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=7563</guid>

					<description><![CDATA[<p>Last time it wasn’t hard anymore: Within two days my post about my ‘reset’ because of lacking an ‘inner linking’ and about the ‘right way to be crawled and indexed’ had been processed by Google. Like my revised posts, I had designed it in accordance with the recommendations of YOAST that take into account Google’s [&#8230;]</p>
<p>The post <a href="https://fodina.de/writing-style/">My Googlized Writing Style</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Last time it wasn’t hard anymore: Within two days my post about my ‘reset’ because of lacking an ‘<a href="https://backlinko.com/hub/seo/internal-links">inner linking’</a> and about the ‘right way to be crawled and indexed’ had been processed by Google. Like my revised posts, I had designed it in accordance with the recommendations of YOAST that take into account Google’s ‘unspoken’ specifications — as proclaimed by YOAST. However, by following these rules, I had also given in to the stylistic superiority of Google and YOAST:<span id="more-7563"></span></p>



<p>To clarify the consequences of their force, let me first summarize the eleven commandments that I had taken from YOAST and with the implementation of which I have so far always been able to get green YOAST ‘traffic’-lights — one for “SEO” and one for readability. Just for the sake of completeness, let me second note that I could successfully apply for indexing at Google for the pages prepared accordingly.<sup><a href="https://fodina.de/writing-style/#footnote_0_7563" id="identifier_0_7563" class="footnote-link footnote-identifier-link" title="by using the option of the search console to hand over a URL manually.">1</a></sup></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/schreibstil">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>Define a key phrase that reflects the subject<sup><a href="https://fodina.de/writing-style/#footnote_1_7563" id="identifier_1_7563" class="footnote-link footnote-identifier-link" title="The wolf of seo says that the keyword phrase should not capture what your post is about, but what your post is perfect for. But if you apply the rules 2 and 3, the difference between these viewpoints shrinks considerably.">2</a></sup> of your page.<sup><a href="https://fodina.de/writing-style/#footnote_2_7563" id="identifier_2_7563" class="footnote-link footnote-identifier-link" title="Keep in mind: Use only 2 words, at most 3. Because in that form, the key phrase must be placed at the beginning of the title and integrated into the body text. Do not trust YOAST to be able to understand syntactic variants - even if it promises to do so">3</a></sup></li>



<li>Just as defined, put that key phrase at the beginning of your page title.<sup><a href="https://fodina.de/writing-style/#footnote_3_7563" id="identifier_3_7563" class="footnote-link footnote-identifier-link" title="If you shorten the resulting slug of your page, use at least speaking syntagms in your URL.">4</a></sup></li>



<li>Just as defined, integrate that key phrase somewhere into the first paragraph of your page, too.</li>



<li>Include that key phrase in the meta description of your page, which must have at least 120 and no more than 156 characters</li>



<li>Link your post to other pages on your blog about the respective topic.</li>



<li>Link your post to external pages about that topic.</li>



<li>Write only a few sentences with more than 25 words.</li>



<li>Link your (short) (main) sentences by (logical) conjunctions.</li>



<li>Do not let your paragraphs ‘swell’ over 150 words, or at least stay under 200.</li>



<li>Use only a few passive constructions, and make active statements.</li>



<li>Explicitly request Google to index your new page in the Search Console.<sup><a href="https://fodina.de/writing-style/#footnote_4_7563" id="identifier_4_7563" class="footnote-link footnote-identifier-link" title="Don't rely only on your updated sitmap.">5</a></sup></li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p>One thing in advance: If you already think that this post does not follow these rules, let me tell you: Yes, it doesn’t. Intentionally. Let us test by this article what happens if we don’t submit our posts to the unifying dictates of Google and YOAST.</p>



<p>The result of these ‘recommendations’ is a different writing style than you and I (occasionally) prefer. It’s known that passive sentence constructions are more difficult to understand and thus require more reading work.<sup><a href="https://fodina.de/writing-style/#footnote_5_7563" id="identifier_5_7563" class="footnote-link footnote-identifier-link" title="If you don't believe that, you may deliberately 'torture' yourself through this intentionally passivated paragraph">6</a></sup> And it’s known, that our reading life is made easier by short sentences. If we are forced by search engines to write this way, they are doing our readers some good. Even if we are ‘gently’ moved away from the academic writing style via the threat that our texts will not be indexed.</p>



<p>Hence, this does not annoy me. The thing with the key phrase, however, does. Because it prevents me from arousing a desire to read the following article by a merely suggestive title, and from letting concrete meaning and context of the headline grow out of the first sentences. Free associations — that’s what I like to work with. Actually. But I can’t, if I want to obey the commandments. An example: In my first run, I had titled my article ‘Clouds and Lists — 2 on 1 Stroke’ as ‘2 in 1 Stroke’ by which I hoped to open a little associative space linking my post to the fairy tale <em><a href="https://en.wikipedia.org/wiki/The_Brave_Little_Tailor">brave little tailor</a></em>.<sup><a href="https://fodina.de/writing-style/#footnote_6_7563" id="identifier_6_7563" class="footnote-link footnote-identifier-link" title="Unfortunately - after having read story again in its entirety - it makes me a little uncomfortable myself. It is already a bad dazzler, that brave little tailor, not only a sly one. So, the story does not open an associative space into which I would like to blow myself">7</a></sup> ‘2 in 1 Stroke’ — that is an elegant title. Prefixing it with the key phrase ‘Clouds and Lists’ takes the point out of the title and makes it unwieldy. Additionally, repeating the key phrase in the first paragraph turns us into pushy babblers — just to get our green YOAST traffic lights and become part of the Google index.</p>



<p>A good example — from a SEO point of view — is the page <a href="https://wolf-of-seo.de/was-ist/fokus-keyphrase/">https://wolf-of-seo.de/was-ist/fokus-keyphrase/</a>. Here, the key phrase <em>focus keyword</em> is placed at the beginning of the title and immediately repeated in the first, very short paragraph — together with its twin focus <em>key phrase</em>. And in the first six sentences<sup><a href="https://fodina.de/writing-style/#footnote_7_7563" id="identifier_7_7563" class="footnote-link footnote-identifier-link" title="which - in this case - is equivalent to: in the first 6 paragraphs">8</a></sup>, these phrases occur more than 10 times. The ‘wolf of seo’ should not have any problems getting his page indexed. And even more: the content of his article is very informative! Only stylistically — stylistically it is grotty. If you read the post slowly, you will surely notice its redundant verbiage. The annoying thing about the dictates of good SEOcity is that we obviously have to write like this if we want to be indexed. Because only what is indexed can be found and ranked at all.</p>



<p>If you’ve read the wolf-of-seo’s article slowly, read my article in the same way. And you will notice that it is even more grotty than his! Because I have intentionally violated the above commandments:</p>



<ul class="wp-block-list">
<li>My key phrase ‘styleXpolice’ does not appear in the title, in the first paragraph, or anywhere else, hence not even in the slug.<sup><a href="https://fodina.de/writing-style/#footnote_8_7563" id="identifier_8_7563" class="footnote-link footnote-identifier-link" title="Inside of the post, I can not write this word as I've really used it (without an X), because otherwise, YOAST says &quot;The keyphrase was found 1 time. That's less than the recommended minimum of 5 times for a text of this length.&quot;">9</a></sup></li>



<li>I’ve included a ‘meta description’ that is intentionally too short and misses the topic.</li>



<li>This post uses links to external sites, but internal links to other pages on my site.</li>



<li>My text uses too many passive constructions<sup><a href="https://fodina.de/writing-style/#footnote_9_7563" id="identifier_9_7563" class="footnote-link footnote-identifier-link" title="&quot;17% of the sentences contain passive voice&quot;">10</a></sup>, has one too-long paragraph<sup><a href="https://fodina.de/writing-style/#footnote_10_7563" id="identifier_10_7563" class="footnote-link footnote-identifier-link" title="&quot;1 of the paragraphs contains more than the recommended maximum of 150 words.&quot;">11</a></sup>, and uses too long sentences<sup><a href="https://fodina.de/writing-style/#footnote_11_7563" id="identifier_11_7563" class="footnote-link footnote-identifier-link" title="&quot;31.9% of the sentences contain more than 20 words, which is more than the recommended maximum of 25%&quot;">12</a></sup>.</li>
</ul>



<p>Because of these deviations from the rules, I got an orange YOAST traffic light for this post in terms of SEO and a red one in terms of readability.</p>



<p>Thus, we can now test, how long Google takes to index this article.<sup><a href="https://fodina.de/writing-style/#footnote_12_7563" id="identifier_12_7563" class="footnote-link footnote-identifier-link" title="In order not to compare pears with apples, I will first inform Google about this new post only by an update of my sitemap. Some months later, I will also request Google manually to index this post.">13</a></sup> As soon as it has been indexed, I will let you know. But you can also try it by yourself. Just ‘google’ for ‘SEOcity’. This word exists as a noun (so far) only in this article.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<ul class="wp-block-list">
<li>Sitemap updated: 2023-08-27 / evaluated: 2023-08-27 (maybe earlier than updated)</li>



<li>Post found: ????-??-?? / crawled: ????-??-??  / indexed: ????-??-?? </li>



<li>Indexing manually ordered: ????-??-?? </li>



<li>Post found: ????-??-?? / crawled: ????-??-?? / indexed: ????-??-??</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity">
<ol class="footnotes"><li id="footnote_0_7563" class="footnote">by using the option of the search console to hand over a URL manually.</li><li id="footnote_1_7563" class="footnote">The <em><a href="https://wolf-of-seo.de/was-ist/fokus-keyphrase/">wolf of seo</a></em> says that the keyword phrase should not capture what your post is about, but what your post is perfect for. But if you apply the rules 2 and 3, the difference between these viewpoints shrinks considerably.</li><li id="footnote_2_7563" class="footnote">Keep in mind: Use only 2 words, at most 3. Because in that form, the key phrase must be placed at the beginning of the title and integrated into the body text. Do not trust YOAST to be able to understand syntactic variants — even if it promises to do so</li><li id="footnote_3_7563" class="footnote">If you shorten the resulting slug of your page, use at least speaking syntagms in your URL.</li><li id="footnote_4_7563" class="footnote">Don’t rely only on your updated sitmap.</li><li id="footnote_5_7563" class="footnote">If you don’t believe that, you may deliberately ‘torture’ yourself through this intentionally passivated paragraph</li><li id="footnote_6_7563" class="footnote">Unfortunately — after having read story again in its entirety — it makes me a little uncomfortable myself. It is already a bad dazzler, that brave little tailor, not only a sly one. So, the story does not open an associative space into which I would like to blow myself</li><li id="footnote_7_7563" class="footnote">which — in this case — is equivalent to: in the first 6 paragraphs</li><li id="footnote_8_7563" class="footnote">Inside of the post, I can not write this word as I’ve really used it (without an X), because otherwise, YOAST says “The keyphrase was found 1 time. That’s less than the recommended minimum of 5 times for a text of this length.”</li><li id="footnote_9_7563" class="footnote">“17% of the sentences contain passive voice”</li><li id="footnote_10_7563" class="footnote">“1 of the paragraphs contains more than the recommended maximum of 150 words.”</li><li id="footnote_11_7563" class="footnote">“31.9% of the sentences contain more than 20 words, which is more than the recommended maximum of 25%”</li><li id="footnote_12_7563" class="footnote">In order not to compare pears with apples, I will first inform Google about this new post only by an update of my sitemap. Some months later, I will also request Google manually to index this post.</li></ol><p>The post <a href="https://fodina.de/writing-style/">My Googlized Writing Style</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/writing-style/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Internal Linking — a Reset</title>
		<link>https://fodina.de/internal-linking/</link>
					<comments>https://fodina.de/internal-linking/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 23 Aug 2023 11:54:25 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=7526</guid>

					<description><![CDATA[<p>It’s a while ago, that I wrote about SEO. That should not be a big deal, I thought at that time. In its templates, bootScore thankfully uses semantic HTML tags by default. Thus, it should be sufficient to submit one’s own sitemap to Google &#38; Co. Enriching the pages themselves with additional keywords should be [&#8230;]</p>
<p>The post <a href="https://fodina.de/internal-linking/">Internal Linking — a Reset</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>It’s a while ago, that I wrote about SEO. That should not be a big deal, I thought at that time. In its templates, <a href="https://bootscore.me/">bootScore</a> thankfully <a href="https://fodina.de/bootscore-plus-seo/">uses semantic HTML tags by default</a>. Thus, it should be sufficient to submit one’s own sitemap to Google &amp; Co. Enriching the pages themselves with additional keywords should be superfluous. A good primary content would be enough. No need for a second text behind the actual one. That’s the way, I thought. Moreover, I saw no reason to talk about internal linking. Rarely has <em>Google</em> so embarrassingly proven me wrong:<span id="more-7526"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/innere-verlinkung">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>Replace all schematic slugs with talking ones.</li>



<li>Link every post and page to all other internal, related posts or pages.</li>



<li>Install <a href="https://yoast.com/wordpress/plugins/seo/">YoastSEO</a>.</li>



<li>Implement so many improvements suggested by YoastSEO that its traffic lights turn green.</li>



<li>For every single page and post, explicitly ask Google via the <a href="https://search.google.com/search-console">Google Search Console</a> to index that text.</li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>


<div class="wp-block-image"><figure class="alignleft size-medium is-resized is-style-default "><a href="https://fodina.de/wp-content/uploads/2023/08/search-console-problem-900x1100-1.png" data-fancybox><img decoding="async" src="https://fodina.de/wp-content/uploads/2023/08/search-console-problem-900x1100-1-245x300.png" alt="Google Search Console Problem" width="300"></a></figure></div>



<p>What has happened, that I changed my mind? After submitting my sitemap sometime in April, Google had indexed only 6 of my 109 pages over 3 months. It did not grumble about the quality. It simply announced that it had found 81 pages or posts and had crawled 17, but had not indexed any of them. Google did not consider my texts worthy of indexing. Despite my interesting topic, ‘bootScore’. And in spite of the articles being so relevant, they could inspire the project ‘bootScore’. In this situation, trying to improve my ranking was nonsense: what’s not indexed, is not found at all.</p>



<p>It took me a while to understand what had happened. And it took me even more time to fix that:</p>



<p>While migrating to bootScore, I wanted to condense my site. It should become more reader-friendly with less redundancy. Fewer bells and whistles. That’s why I mapped my thematic clusters onto categories and tags and properly assigned my texts to them. I wanted to take advantage of what bootScore brings to the table on its own. On each page, our readers can call the related posts by clicking on the assigned keywords. So why should I additionally link a post to related ones manually? Why should I hook individual pages or posts into my menu? A clever guiding system of categories without any additional inner linking should be enough.</p>



<p>But that’s exactly what Google sees differently! Pages that are not linked to other pages on the same site are not important — apparently, even in the eyes of the author. Otherwise, she would want to lead her readers there. So why should Google index them? My textbooks((Pars pro toto: cf. Czysch, Stephan: SEO mit Google Search Console, 2. Ed., Heidelberg 2017, pp. 168ff))  had always pointed out that! It was my fault to ignore that.</p>



<p>Just, as my fault for grouping my posts with nonspeaking ‘slugs’: If I — for example — used a cluster ‘image’, I thought I could name my posts ‘image‑a’ , … ‘image‑i’. So, I had the same page names on the German and the English sites. Also, a bad idea that causes Google to take the posts as unimportant.((pars pro toto: cf. Dziki, Julian: Suchmaschinenoptomierung für dummies, 2. Ed., Weinheim 2021, p. 62)</p>



<p>After having understood these side effects, I reworked everything. I replaced the symbolic page names with speaking ones. I installed YoastSeo and implemented so many of its measures concerning the topics ‘SEO’ and ‘readability’ that the respective traffic lights switched from red to green. Or at least to yellow. All in all a very time-consuming work.</p>



<p>Nevertheless, there was still no inner linking with it. That’s why I wrote a summary for each of my thematic clusters and linked its words to the intended ‘siblings’ of posts and pages. Moreover, because — in the Future — I would have to update these summaries often, I reduced my typing work by implementing these summaries as ShortCodes. So, a simple string at the end of each post and page would integrate the respective internal linking.</p>


<div class="wp-block-image"><figure class="alignright size-medium is-resized is-style-default "><a href="https://fodina.de/wp-content/uploads/2023/08/search-console-success-900x1100-1.png" data-fancybox><img decoding="async" src="https://fodina.de/wp-content/uploads/2023/08/search-console-success-900x1100-1-245x300.png" alt="Google Search Console Success" width="300"></a></figure></div>



<p>Nevertheless, the real indexing breakthrough came only after I had submitted each post and page individually and manually to Google Search Console for indexing — including the time-consuming indexability checks for each text. Now Google has indexed 84 of my 74 articles and 18 pages of my German site. What still is not indexed is indeed less important, like my privacy page or the image proof. And on my English site it looks even better: of the currently offered 53 posts and 15 pages, 114 are indexed — from which we may derive that the Google index still contains outdated links. For those, however, I preferred to follow the recommendations of the textbooks right away. I implemented respective redirects with the plugin ‘<a href="https://wordpress.org/plugins/quick-301-redirects/">Quick 301 Redirects</a>’.</p>



<p>So what was the decisive measure for success? I’m afraid it takes all of them. Even if I had to change my writing style to do it. Especially in the implementation of YoastSEO recommendations. But more about that later. As soon as Google has indexed this post. Always first things first.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="http://fodina.de/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>?  Well,
  if a web designer must <a href="http://fodina.de/yaml-css/">abandon her current WordPress theme</a>, 
  she needs a replacement. A <a href="https://github.com/bootscore">free ‘off-the-shelf’ theme</a>, 
  she probably wants to <a href="http://fodina.de/pimp-your-bootscore/">personalize</a>. 
  First <a href="http://fodina.de/bootscore-font-awesome-shortcode/">a bit</a> 
  <a href="http://fodina.de/font-awesome-checklist/">cosmetically</a>, then in 
  terms of <a href="http://fodina.de/hyphenation/">the gray value of her pages</a>, 
  <a href="http://fodina.de/bilingualism/">multilingualism</a> and internal
  <a href="http://fodina.de/footnotes/">reference techniques</a> and
  <a href="http://fodina.de/internal-linking/">linking</a>. Finally, 
  she perhaps enables  <a href="http://fodina.de/minor-footer-stuff/">special footers</a>, 
  <a href="http://fodina.de/subordinated-menu/">a secondary menu</a> or 
  a <a href="http://fodina.de/copyright-line/">copyright notice</a> before 
  <a href="http://fodina.de/no-broken-links-please/">checking</a>
  the <a href="http://fodina.de/bootscore-plus-seo/">SEO</a> features 
  of the selected theme. This is a way that this post supports too.
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<p>The post <a href="https://fodina.de/internal-linking/">Internal Linking — a Reset</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/internal-linking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pimp Your bootScore</title>
		<link>https://fodina.de/pimp-your-bootscore/</link>
					<comments>https://fodina.de/pimp-your-bootscore/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sun, 23 Apr 2023 21:52:07 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=4525</guid>

					<description><![CDATA[<p>Linking Bootstrap and WordPress to get a responsive design is the task of bootScore, a WP-theme bringing along what the web designer actually does not want to program herself. Instead, she can now rely on an MIT-licensed preliminary work hosted on GitHub. But its ‘standard outfit’ still must be personalized, ‘pimped’ — by the work [&#8230;]</p>
<p>The post <a href="https://fodina.de/pimp-your-bootscore/">Pimp Your bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Linking Bootstrap and WordPress <a href="https://fodina.de/bootscore-migration/">to get a responsive design is the task of bootScore, a WP-theme </a>bringing along what the web designer actually does not want to program herself. Instead, she can now rely on an MIT-licensed preliminary work <a href="https://github.com/bootscore/bootscore">hosted on GitHub</a>. But its ‘standard outfit’ still must be personalized, ‘pimped’ — by the work of a Web Designer? The theme is adapted — so <em>bootScore</em> — by modifying its “[…] .scss, .php, and .js files”. So you can pimp your bootScore easily. Here are my 13 steps from a pure <em>bootScore</em> to my personal ‘homepage’:<span id="more-4525"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/bootscore-pimpen">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i></h2>



<p>As a starting point, I had (already) </p>



<ul class="wp-block-list">
<li>installed WordPress<sup><a href="https://fodina.de/pimp-your-bootscore/#footnote_0_4525" id="identifier_0_4525" class="footnote-link footnote-identifier-link" title="instructions on how to do this are aplenty, including one from WordPress itself.">1</a></sup>, </li>



<li>entered (test) data<sup><a href="https://fodina.de/pimp-your-bootscore/#footnote_1_4525" id="identifier_1_4525" class="footnote-link footnote-identifier-link" title="e.g. with those of the site to be migrated or the Theme Unit Test">2</a></sup>, </li>



<li>installed <em>bootScore,</em> and activated it as my theme<sup><a href="https://fodina.de/pimp-your-bootscore/#footnote_2_4525" id="identifier_2_4525" class="footnote-link footnote-identifier-link" title="e.g. according to bootScore instructions">3</a></sup>. </li>
</ul>



<p></p>



<p>Eventually, this results in a way</p>



<p> <a href="https://fodina.de/wp-content/uploads/2023/04/fden-bs-pure-1200x718-1.png" data-fancybox><img decoding="async" src="https://fodina.de/wp-content/uploads/2023/04/fden-bs-pure-1200x718-1-300x180.png" alt="bootScore + Landing Page" width="200"></a> <i class=" fa-solid fa-forward"></i> <a href="https://fodina.de/wp-content/uploads/2023/04/fden-mylap-1490x1372-1.png" data-fancybox><img decoding="async" src="https://fodina.de/wp-content/uploads/2023/04/fden-mylap-1490x1372-1-300x276.png" alt="bootScore + Landing Page" width="200"></a>  <i class=" fa-solid fa-forward"></i>  <a href="https://fodina.de/wp-content/uploads/2023/04/krde-mylap-1490x1372-1.png" data-fancybox><img decoding="async" src="https://fodina.de/wp-content/uploads/2023/04/krde-mylap-1490x1372-1-300x276.png" alt="bootScore + Landing Page" width="200"></a> :</p>



<h2 class="wp-block-heading"><i class=" fa-solid fa-shoe-prints"></i></h2>



<ol class="wp-block-list">
<li>Font Awesome — one symbol says more than 100 words: <a href="https://fodina.de/bootscore-font-awesome-shortcode/">ShortCodes</a> and <a href="https://fodina.de/font-awesome-checklist/">CSS classes</a></li>



<li>SEO from the beginning: <a href="https://fodina.de/bootscore-plus-seo/">HTML semantics, keywords, and sitemaps</a>, and <a href="https://fodina.de/no-broken-links-please/">no dead links</a>, please.</li>



<li>The ‘(un)important’ at the bottom: The discreet and comprehensive footer area for the ‘subordinated’ <a href="https://fodina.de/minor-footer-stuff/">legal stuff</a>, the subordinated <a href="https://fodina.de/subordinated-menu/">secondary menu</a>, and the custom <a href="https://fodina.de/copyright-line/">copyright line</a>.</li>



<li>Thinking multilingualism: <a href="https://fodina.de/bilingual/">bilingualism without WP globe</a></li>



<li>For clarity: the <a href="https://fodina.de/deeper-nested-menus/">deeper branched menu</a> with <a href="https://fodina.de/shortcodes-in-menu/">integrated shortcodes</a>, clean layers, and <a href="https://fodina.de/menu-stack/">readable stacking</a>, which nevertheless has to be <a href="https://fodina.de/no-hover-menus/">no H‑OVER menu</a>.</li>



<li>Don’t fiddle, automate: The <a href="https://fodina.de/hyphenation/">built-in hyphenation</a></li>



<li>A picture says more than 1000 words, for example, 
<ul class="wp-block-list">
<li><strong>an image with a <a href="https://fodina.de/fancy-boxes/">fancy box</a></strong> manually inserted into the text — gladly accelerated delivered <a href="https://fodina.de/speed-up-images/">via WordPress pre-calculated image sizes</a> or as <a href="https://fodina.de/fancy-svgs/">SVG</a>.</li>



<li><strong>an automatically managed ‘<a href="https://fodina.de/blurred-featured-images/">primary post image</a>’</strong>, not <a href="https://fodina.de/less-blurred-images/">(less) blurred</a> when adjusted for Responsive Design’s sake: That organizes the <a href="https://fodina.de/without-any-blurred-images/">modern IMG tag with the source information</a> probably best. Faster to implement, but less effective, would be to have WordPress calculate <a href="https://fodina.de/larger-image-squares/">another image size</a> in advance.</li>



<li>images, <strong>that are offered on the web as <a href="https://fodina.de/image-databases/">really free images</a></strong> if we <a href="https://fodina.de/picture-credit-page/">provide an image directory</a> to meet licensing requirements.</li>



<li>And the little browser images next to the URL? Or the logo? <strong>For that, we use <a href="https://fodina.de/logos-and-favicons/"><em>bootScoore’s</em> logo and favicon system</a></strong>.</li>
</ul>
</li>



<li>Easing the finding: <a href="https://fodina.de/two-on-one-stroke/">TAG clouds and post lists</a> in the sidebar</li>



<li>The walled overview: The <a href="https://fodina.de/masonry-survey/">Masonry Contribution List</a>.</li>



<li>First things first: a <a href="https://fodina.de/an-own-landingpage/">dedicated landing page</a> — <a href="https://fodina.de/a-leaner-landing-page/">self-designed</a> — and then <a href="https://fodina.de/away-what-distracts/">get rid of what’s distracting</a>, use <a href="https://fodina.de/context-sensitive-sidebars/">context-sensitive sidebars</a> and more <a href="https://fodina.de/understated-post-links/">discreet references to recent posts</a>.</li>



<li>Readability: <em>bootScore</em> and <a href="https://fodina.de/suitable-web-fonts/">the custom general font</a> and the <a href="https://fodina.de/fonts-for-special-occasions/">font for special occasions</a></li>



<li>Respecting the law is a need: <a href="https://fodina.de/privacy-dsgvo/">data protection</a>, a proper <a href="https://fodina.de/properly-used-cookies/">cookie dialog</a>, and <a href="https://fodina.de/properly-managed-cookies/">cookie management</a>.</li>



<li>The first impression counts: <a href="https://fodina.de/customized-colors/">customizing the color concept</a>.<a href=")"></a></li>
</ol>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i></h2>



<p>By following these steps, a bootScore-based website in responsive design is created, that documents the way to it in itself. So that I can also lookup in the future, how I have done it in the past. If this also benefits others, that would be a welcome side effect.</p>
<ol class="footnotes"><li id="footnote_0_4525" class="footnote">instructions on how to do this are aplenty, including <a href="https://developer.wordpress.org/advanced-administration/before-install/howto-install/">one from WordPress itself</a>.</li><li id="footnote_1_4525" class="footnote">e.g. with those of the site to be migrated or the <a href="https://codex.wordpress.org/Theme_Unit_Test">Theme Unit Test</a></li><li id="footnote_2_4525" class="footnote">e.g. according to <em><a href="https://bootscore.me/documentation/installation/">bootScore instructions</a></em></li></ol><p>The post <a href="https://fodina.de/pimp-your-bootscore/">Pimp Your bootScore</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/pimp-your-bootscore/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Data Privacy, DSGVO, and Cookies</title>
		<link>https://fodina.de/privacy-dsgvo/</link>
					<comments>https://fodina.de/privacy-dsgvo/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Fri, 21 Apr 2023 09:33:10 +0000</pubDate>
				<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=6073</guid>

					<description><![CDATA[<p>Often the website operator is told, that Data protection is complex and has to be organized by experts. But what if she doesn’t have the money for that? If it seems somehow nonsensical to shoot at a sparrow blog with the cannon of a paid team of experts? Then — maybe and with the help [&#8230;]</p>
<p>The post <a href="https://fodina.de/privacy-dsgvo/">Data Privacy, DSGVO, and Cookies</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Often the website operator is told, that Data protection is complex and has to be organized by experts. But what if she doesn’t have the money for that? If it seems somehow nonsensical to shoot at a sparrow blog with the cannon of a paid team of experts? Then — maybe and with the help of Google — she installs some popular WordPress plugins for data privacy and DSGVO and/or cookies — in the hope that all goes well. Or she investigates it in more detail. And in the end, she perhaps gathers rules of thumb, from which at least one well-workable way results. Here are my 3.7 rules of thumb, applied to my own <a href="https://fodina.de/ds-compliance/">data privacy file</a>:<span id="more-6073"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/datenschutz-dsgvo">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>I. Use only the personal data that you really need for the functioning of your system.</li>



<li>II. If you collect personal data, tell the owners,
<ul class="wp-block-list">
<li>that you are going to do so,</li>



<li>for what purpose you use the data,</li>



<li>what legal basis authorizes you to do so,</li>



<li>with whom you share the data,</li>



<li>how long you will store it,</li>



<li>how they can ask you which data you have stored over time</li>



<li>how they can have the data deleted again.</li>
</ul>
</li>



<li>III. If you store data on the computer of your users, which they did not request directly or indirectly, ask them beforehand for permission.</li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p>If I proceed according to this — so I make myself believe again and again — I will design my sites in a way that I avoid the roughest traps<sup><a href="https://fodina.de/privacy-dsgvo/#footnote_0_6073" id="identifier_0_6073" class="footnote-link footnote-identifier-link" title="cf. https://www.e-recht24.de/artikel/datenschutz/8451-hinweispflicht-fuer-cookies.html">1</a></sup> and errors<sup><a href="https://fodina.de/privacy-dsgvo/#footnote_1_6073" id="identifier_1_6073" class="footnote-link footnote-identifier-link" title="cf. https://www.ihk.de/halle/recht/datenschutz/sonstige-rechtsinformationen/cookie-banner-fuenf-fehler-die-sie-vermeiden-sollten--4854218">2</a></sup>. Because I always have one thing in mind: with a mere cookie banner it is not done:</p>



<ol class="wp-block-list">
<li>The first thing I consider is where my blog as a system collects personal data. The ones that I explicitly request in and with forms are the easiest for me to notice and remember. Here I know — qua office — what I do with them and to whom I pass them etc.</li>



<li>Furthermore, I am aware that IP addresses are also considered personal data — although the internet would not function without them.</li>



<li>Additionally, WordPress can collect, note, and send data to third parties — as well as the plugins I’ve activated, the JavaScript libraries I’ve installed, the Google fonts I’ve integrated, etc., etc.</li>



<li>Eventually, my commenters are usually made recognizable via the common Gravatar system.</li>
</ol>



<p>I have to sort out this mishmash:</p>



<ul class="wp-block-list">
<li>Rule (I) tells me that less is more: the fewer data I ask for and the fewer plug-ins I use, the leaner my data protection concept can be. So I clean out here, e.g. by treating productive and developing systems differently.</li>



<li>Rule (II) tells me that I must actually describe the remaining data sets in the data protection concept. So I also determine what data my plugins, font requests, and other technical components collect, how they store it, and where they pass it on.</li>



<li>Rule (III) tells me that I have to get permission to write files, i.e. cookies, to my user’s computer — either by law, as in the case of technically necessary cookies, or by consent of my user. And to get this consent, it is helpful to specify the purpose and effect.</li>
</ul>



<p></p>



<p>My next posts describe how I have implemented this in my <em>bootScore</em>-based site concretely.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="http://fodina.de/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>? Well,
  besides her <a href="http://fodina.de/pimp-your-bootscore/">normal design work</a>,
  the web-designer must deal with some legal requirements, as — for example — 
  those of the <a href="http://fodina.de/privacy-dsgvo/">DSGVO privacy</a>, of having a 
  <a href="http://fodina.de/properly-used-cookies/">cookie consent dialog</a> 
  and the respective <a href="http://fodina.de/properly-managed-cookies/">semantic</a>, 
  of having a <a href="http://fodina.de/ds-compliance/">data privacy page</a>,
  an <a href="http://fodina.de/imprint/">imprint</a>, 
  an <a href="http://fodina.de/picture-credits/">image reference page</a>, and
  a <a href="http://fodina.de/foss-compliance/">FOSS compliance page</a>.
  This post shall support you to manage your legal issues. 
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<ol class="footnotes"><li id="footnote_0_6073" class="footnote">cf. <a href="https://www.e-recht24.de/artikel/datenschutz/8451-hinweispflicht-fuer-cookies.html">https://www.e‑recht24.de/artikel/datenschutz/8451-hinweispflicht-fuer-cookies.html</a></li><li id="footnote_1_6073" class="footnote">cf. <a href="https://www.ihk.de/halle/recht/datenschutz/sonstige-rechtsinformationen/cookie-banner-fuenf-fehler-die-sie-vermeiden-sollten--4854218">https://www.ihk.de/halle/recht/datenschutz/sonstige-rechtsinformationen/cookie-banner-fuenf-fehler-die-sie-vermeiden-sollten–4854218</a></li></ol><p>The post <a href="https://fodina.de/privacy-dsgvo/">Data Privacy, DSGVO, and Cookies</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/privacy-dsgvo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Extra Fonts for Specific Cases</title>
		<link>https://fodina.de/fonts-for-special-occasions/</link>
					<comments>https://fodina.de/fonts-for-special-occasions/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 19 Apr 2023 08:37:00 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=6058</guid>

					<description><![CDATA[<p>bootstrap and bootScore use SCSS variables — as we know. Grouping fonts is done by variables. And we can define two groups. This is sufficient if we want to use only two font families. But if we want to use extra fonts — for example, a special google font in our menus -, we need [&#8230;]</p>
<p>The post <a href="https://fodina.de/fonts-for-special-occasions/">Extra Fonts for Specific Cases</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>bootstrap</em> and <em>bootScore</em> use SCSS variables — as <a href="https://fodina.de/suitable-web-fonts/">we know</a>. Grouping fonts is done by variables. And we can define two groups. This is sufficient if we want to <a href="https://bootscore.me/documentation/google-fonts/">use <em>only two font families</em></a>. But if we want to use extra fonts — for example, <a href="https://fonts.google.com/">a special google font</a> in our menus -, we need to do things differently:<span id="more-6058"></span></p>



<p>To group fonts, the file <code>bootstrap/_variables.scss</code> provides the variables <code>$font-family-base</code>, <code>$font-family-sans-serif</code>, <code>$font-family-monospace</code> and <code>$font-family-code</code>. A variable <code>$font-family-serif</code> does not exist. If we overwrite <em>family-base</em> in our <code>_bscore_variables.scss</code> file, we redefine the default. If we want to use a deviant font for our headings, we have to redefine the variables <code>$headings-font-family</code> and <code>$display-font-family</code>. This is sufficient if we want to use <em>only two font families</em>. Here is a way to use more groups:</p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/fonts-fuer-besondere-anlaesse">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>Define the variable <code>$menu-font-family: 'PT Sans', sans-serif, !default;</code> in your child theme file <code>scss/_bscore_variables.scs</code></li>



<li>Add the following lines to your child theme file <code>scss/_bsscore-custom.scs</code>:</li>
</ul>



<pre class="wp-block-code"><code>#bootscore-navbar{
  font-family: $menu-font-family;
}

.footerSubMenu {
  font-family: $menu-font-family;
}</code></pre>



<ul class="wp-block-list">
<li>Assign the new class to the widgets <code>Footer 1</code> to <code>Footer 4</code> containing a menu list via <code>&lt;ul class="footerSubMenu"&gt;</code>.</li>
</ul>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p>Again, briefly, about the need to do that:</p>



<p>Menus usually look better with sans-serif fonts. If we have already assigned a sans-serif font to the <code>$font-family-base</code> variable, everything is fine. But if we have assigned a serif font and want to have a deviant font for our selectors, we must select a sans-serif font for the headlines and for the menus. <em>bootScore</em> has embedded the main menu into a <em>div</em> with the ID <code>bootscore-navbar</code>. We can reuse that. But for the submenus in the footer area, we must define a corresponding class and assign it to the lists manually.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="http://fodina.de/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>? Well,
  when the web designer has completed her <a href="http://fodina.de/pimp-your-bootscore/">work</a>
  on <a href="http://fodina.de/without-any-blurred-images/">good illustrations</a>, 
  she can relax and integrate <a href="http://fodina.de/two-on-one-stroke/">tags and clouds</a> 
  into her site, <a href="http://fodina.de/masonry-with-three-colums/">improve</a> 
  her <a href="http://fodina.de/masonry-survey/">overview page</a> 
  and design <a href="http://fodina.de/an-own-landingpage/">her own landing page</a>. 
  Whether the <a href="http://fodina.de/away-what-distracts/">resulting fullness</a> 
  really benefits her own reader, 
  whether it can  <a href="http://fodina.de/a-leaner-landing-page/">become slimmer</a> 
  and <a href="http://fodina.de/context-sensitive-sidebars/">how</a>, 
  whether more <a href="http://fodina.de/understated-post-links/">discreet references</a> 
  and <a href="http://fodina.de/fonts-for-special-occasions/">specific</a> 
  <a href="http://fodina.de/suitable-web-fonts/">fonts</a> 
  also increase the readability, 
  all this she should nevertheless consider while implementing these features. This post supports 
  these steps towards a personalized bootScore site.
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<p>The post <a href="https://fodina.de/fonts-for-special-occasions/">Extra Fonts for Specific Cases</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/fonts-for-special-occasions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Suitable Web-Fonts</title>
		<link>https://fodina.de/suitable-web-fonts/</link>
					<comments>https://fodina.de/suitable-web-fonts/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 05 Apr 2023 10:24:43 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.fd/?p=5952</guid>

					<description><![CDATA[<p>Selecting good fonts is a matter of design, getting suitable web-fonts a matter of knowledge. Not only, if we need some for special cases. With bootScore we can incorporate Google Fonts directly. We are even told how to host them locally, so we can bypass the notice in the privacy policy. Nevertheless, we have to [&#8230;]</p>
<p>The post <a href="https://fodina.de/suitable-web-fonts/">Suitable Web-Fonts</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Selecting good fonts is a matter of design, getting suitable web-fonts a matter of knowledge. Not only, if we need <a href="https://fodina.de/fonts-for-special-occasions/">some for special cases</a>. With <em>bootScore</em> we can incorporate Google Fonts directly. We are even told <a href="https://bootscore.me/documentation/google-fonts/">how to host them locally</a>, so we can bypass the <a href="https://fodina.de/ds-compliance/">notice</a> in the <a href="https://fodina.de/ds-compliance/">privacy policy</a>. Nevertheless, we have to get a little involved with <em>Bootstrap</em> as well:<span id="more-5952"></span></p>



<p class="has-text-align-right"></p><div class="container"><div class="d-flex justify-content-end sample-row"><div class="col-xs"><div class="text-right">[ en | <a href="https://karsten-reincke.de/passende-web-fonts">de</a> ]</div></div></div></div>



<h2 class="wp-block-heading"><i class=" fa-regular fa-face-smile"></i> Solution</h2>



<ul class="wp-block-list">
<li>Choose from the <a href="https://fonts.google.com/">Google Fonts</a>:
<ul class="wp-block-list">
<li>a font with serifs (e.g. pt-serif or noto-serif),</li>



<li>a matching sans-serif font (e.g. pt-sans or noto-sans),</li>



<li>a matching monospace font (pt-mono or noto-sans-mono)</li>



<li>and maybe a special font for headlines (e.g. arima-madurai or eb-garamond)</li>
</ul>
</li>



<li>Select each font after another in the <a href="https://gwfh.mranftl.com/fonts">google-webfonts-helper</a> and
<ul class="wp-block-list">
<li>leave the charset on <em>latin</em> * select — if available</li>



<li>select — if available — the sizes 400 and 700.</li>



<li>select — if available — the styles regular, regular italic, bold and bold italic.</li>



<li>copy the <code>font-face-code</code> created in <em>google-webfonts-helper</em> into the file <code>scss/_bscore_custom.scss</code>.</li>



<li>download the zip-package from *google-webfonts-helper</li>
</ul>
</li>



<li>Create a folder <code>fonts</code> in your child theme.</li>



<li>Unzip all downloaded zip packages in the folder <code>fonts</code>.</li>



<li>Extend the file <code>scss/_bscore_variables.scss</code> with the lines:</li>
</ul>



<pre class="wp-block-code"><code>  $font-family-base: 'Noto sans', Verdana, sans-serif !default;
  $font-family-sans-serif: 'Noto Sans', Verdana, sans-serif, !default;
  $font-family-monospace: 'Noto Sans Mono', 'Courier New', monospace, !default;
  $font-family-code: 'Noto Sans Mono', 'Courier New', monospace, !default;
  $headings-font-family: 'EB Garamond', Garamond, serif !default;
  $display-font-family: 'EB Garamond', Garamond, serif !default;</code></pre>



<h2 class="wp-block-heading"><i class=" fa-regular fa-lightbulb"></i> Background</h2>



<p>Dealing with <em>Fonts</em> is — in terms of concept and content — <em>a wide field</em><sup><a href="https://fodina.de/suitable-web-fonts/#footnote_0_5952" id="identifier_0_5952" class="footnote-link footnote-identifier-link" title="cf. https://kinsta.com/de/blog/html-fonts/">1</a></sup>:</p>



<p>In typography, it is common to distinguish between <em>serif fonts</em> and <em>sans-serif fonts</em>. Serif fonts are better for printed running text because their horizontal extensions on the letter lead the eye in a better way. On the other hand, it was long thought that sans-serif fonts were more readable on screens. However, the finer the screens became over time, the finer the serifs could be displayed. The readability increased, and the eyes tired less. Thus — today — it is said that there is <a href="https://www.website-freiburg.de/leitfaden_fuer_schrift_kombinationen_auswahl_der_besten_webfonts_und_schriftarten_fuer_deine_website/">no longer any real difference in legibility</a>: Serif fonts and sans-serif fonts can be used equally.</p>



<p>Using only one font for all, however, gets boring. At least the headings and body text should differ. On the other hand, too many fonts reduce readability due to the graphical unrest. And readability and immediate perceptibility is the measure of quality. Thus, the modern web designer works with pairs, one font for the headline, and one for the body text. This is why we are so often ‘recommended’ <a href="https://www.fontpair.co/all">font pairs</a> today, where the fonts are quite <a href="https://www.pagecloud.com/blog/best-google-fonts-pairings">wildly combined</a>.</p>



<p>In this context, the distinction between <em>font-family</em> and <em>font-face</em> is also important. With the CSS statement <code>font-family: XYZ;</code> we tell the browser — imprecisely speaking — that it should display the text in an HTML tag with the font <em>XYZ</em>. In fact, however, we are telling it to display the text with a suitable font from the <strong>font family</strong> <em>XYZ</em>. With the CSS statement <code>@font-face {...}</code><sup><a href="https://fodina.de/suitable-web-fonts/#footnote_1_5952" id="identifier_1_5952" class="footnote-link footnote-identifier-link" title="cf. https://www.w3schools.com/cssref/css3_pr_font-face_rule.php">2</a></sup>, we have previously told it that a certain well-designed font from a certain font family (<code>font-family: XYZ</code>) with a certain style (<code>font-style: [normal|italic]</code>) and a certain weight (<code>font-weight: [&lt;400&lt;...&lt;700&lt;]</code>) is available and where to find it. It is then up to the browser to pick the most suitable font out of the group <em>font-family XYZ</em> for a particular place in the HTML source code. After all, it must not only display the font itself but also take into account the specifications ‘<em>normal, italic, bold, bold-italic</em>’.<sup><a href="https://fodina.de/suitable-web-fonts/#footnote_2_5952" id="identifier_2_5952" class="footnote-link footnote-identifier-link" title="cf. https://technicalcommunicationcenter.com/2020/06/10/whats-a-font-font-family-typeface-font-face/">3</a></sup></p>



<p>If a specified font is not available — for example, because the browser could not download or understand it — then the browser chooses another ‘sans-serif’ resp. ‘serif’ font from those that are accessible. If a font of a font family does not exactly fit the other required properties, the browser can ‘produce’ them by tilting or amplifying a font computationally. However, such ‘calculated’ fonts look worse than those explicitly designed that way.<sup><a href="https://fodina.de/suitable-web-fonts/#footnote_3_5952" id="identifier_3_5952" class="footnote-link footnote-identifier-link" title="Therefore it is important to provide the desired font family at least in the weights '400' and '700' and respectively in the types 'regular' and 'italic'">4</a></sup>.</p>



<p>So, in principle, the web designer cannot be sure how her text will actually look on a reader’s computer. To increase the likelihood that the designer will be able to provide her reader with what she intends, the CSS statement <code>font-family: XYZ;</code> may combine several font families — up to the generic <code>serif</code>, <code>sans-serif</code>, or <code>monospace</code> family. The browser assures — for each letter — to take the first font from that family, with which it can display the letter as requested. Whether and how well this works also depends on the type and quality of the browser. To offer the designer even more certainty, the concept of <em>Web Safe Fonts</em> has emerged<sup><a href="https://fodina.de/suitable-web-fonts/#footnote_4_5952" id="identifier_4_5952" class="footnote-link footnote-identifier-link" title="cf. https://www.w3schools.com/cssref/css_websafe_fonts.php">5</a></sup>: Fonts from that she knows that they are (mostly) available on the devices. From these fonts, she can choose a substitute that does not meet her design ideas optimally, but still well.</p>



<p>With respect to our context <em>bootScore</em> and <em>Bootstrap</em>, this creates a strategy for integrating Google fonts locally<sup><a href="https://fodina.de/suitable-web-fonts/#footnote_5_5952" id="identifier_5_5952" class="footnote-link footnote-identifier-link" title="The alternative would be to load the fonts directly from Google font servers on a case-by-case basis. That makes your work easier. And complicates your privacy concept: Because when downloading, Google asks for user data, i.e. your reader's data. The cause for that is your site. Therefore you have to point this out in your data protection concept. So it's better if you download the fonts yourself, integrate them into your site, and deliver them yourself.">6</a></sup>:</p>



<p>We choose our preferred font pair and use — as recommended by <em>bootScore</em> — the <a href="https://gwfh.mranftl.com/fonts">google-webfonts-helper</a> to download the corresponding Google fonts and insert the also generated <code>@font-face</code> instructions into file <code>scss/_bscore_custom.scss</code>.</p>



<p>In the file <code>scss/_bscore_variables.scss</code> we then apply the <em>Bootstrap</em> methodology to decide for which HTML elements the fonts should be used:</p>



<p>With <em>Bootstrap</em>, we specify the ‘main font’ via the variable <code>$font-family-base</code>. This can be the family of a serif font or a sans-serif font. Via the variable, <code>$font-family-sans-serif</code> we specify the main sans-serif font. There is no variable <code>$font-family-serif</code>. If we want to use a different family for the headings than the general main font, the variables <code>$headings-font-family</code> and <code>$display-font-family</code> would be responsible for this. Using this way, we easily can combine all combinations.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-road"></i> And how does this …</h5>
  <p class="myPageContext">… support our 
  <a href="http://fodina.de/bootscore-migration/">migration</a> to 
  <a href="https://bootscore.me/">bootScore</a>? Well,
  when the web designer has completed her <a href="http://fodina.de/pimp-your-bootscore/">work</a>
  on <a href="http://fodina.de/without-any-blurred-images/">good illustrations</a>, 
  she can relax and integrate <a href="http://fodina.de/two-on-one-stroke/">tags and clouds</a> 
  into her site, <a href="http://fodina.de/masonry-with-three-colums/">improve</a> 
  her <a href="http://fodina.de/masonry-survey/">overview page</a> 
  and design <a href="http://fodina.de/an-own-landingpage/">her own landing page</a>. 
  Whether the <a href="http://fodina.de/away-what-distracts/">resulting fullness</a> 
  really benefits her own reader, 
  whether it can  <a href="http://fodina.de/a-leaner-landing-page/">become slimmer</a> 
  and <a href="http://fodina.de/context-sensitive-sidebars/">how</a>, 
  whether more <a href="http://fodina.de/understated-post-links/">discreet references</a> 
  and <a href="http://fodina.de/fonts-for-special-occasions/">specific</a> 
  <a href="http://fodina.de/suitable-web-fonts/">fonts</a> 
  also increase the readability, 
  all this she should nevertheless consider while implementing these features. This post supports 
  these steps towards a personalized bootScore site.
  </p><hr class="wp-block-separator has-alpha-channel-opacity">

<ol class="footnotes"><li id="footnote_0_5952" class="footnote">cf. <a href="https://kinsta.com/de/blog/html-fonts/">https://kinsta.com/de/blog/html-fonts/</a></li><li id="footnote_1_5952" class="footnote">cf. <a href="https://www.w3schools.com/cssref/css3_pr_font-face_rule.php">https://www.w3schools.com/cssref/css3_pr_font-face_rule.php</a></li><li id="footnote_2_5952" class="footnote">cf. <a href="https://technicalcommunicationcenter.com/2020/06/10/whats-a-font-font-family-typeface-font-face/" class="broken_link">https://technicalcommunicationcenter.com/2020/06/10/whats-a-font-font-family-typeface-font-face/</a></li><li id="footnote_3_5952" class="footnote">Therefore it is important to provide the desired font family at least in the weights ‘400’ and ‘700’ and respectively in the types ‘regular’ and ‘italic’</li><li id="footnote_4_5952" class="footnote">cf. <a href="https://www.w3schools.com/cssref/css_websafe_fonts.php">https://www.w3schools.com/cssref/css_websafe_fonts.php</a></li><li id="footnote_5_5952" class="footnote">The alternative would be to load the fonts directly from Google font servers on a case-by-case basis. That makes your work easier. And complicates your privacy concept: Because when downloading, Google asks for user data, i.e. your reader’s data. The cause for that is your site. Therefore you have to point this out in your data protection concept. So it’s better if you download the fonts yourself, integrate them into your site, and deliver them yourself.</li></ol><p>The post <a href="https://fodina.de/suitable-web-fonts/">Suitable Web-Fonts</a> appeared first on <a href="https://fodina.de">FODINA 4 FOSS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://fodina.de/suitable-web-fonts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
