<?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>bootScore Archives - Freigiebigkeit</title>
	<atom:link href="https://karsten-reincke.de/tag/bootscore/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>(Fach-) Informatik vom Dorf</description>
	<lastBuildDate>Sat, 10 Jan 2026 09:51:18 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Das eigene Farbkonzept mit bootScore</title>
		<link>https://karsten-reincke.de/farbkonzept/</link>
					<comments>https://karsten-reincke.de/farbkonzept/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 12:47:28 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[FOSS]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=10749</guid>

					<description><![CDATA[<p>Als “leistungsstarkes, kostenloses Bootstrap-Starter-Theme für WordPress” verwendet bootScore das Farbdesign von Bootstrap und zeichnet seine Elemente entsprechend aus. Zur Verfeinerung dieser allseits gleichen Ergebnisse liefert es aber Techniken mit. So muss die Webdesignerin erst das eigene Farbkonzept entwickeln und es dann in und mit bootScore umsetzen, wenn sie ein persönliches Outfit ihrer Site möchte: Lösung [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/farbkonzept/">Das eigene Farbkonzept mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Als “leistungsstarkes, kostenloses Bootstrap-Starter-Theme für WordPress” verwendet <a href="https://bootscore.me/">bootScore</a> das <a href="https://getbootstrap.com/docs/5.2/utilities/colors/">Farbdesign von Bootstrap</a> und zeichnet seine Elemente entsprechend aus. Zur Verfeinerung dieser allseits gleichen Ergebnisse liefert es aber Techniken mit. So muss die Webdesignerin erst das eigene Farbkonzept entwickeln und es dann in und mit bootScore umsetzen, wenn sie ein persönliches Outfit ihrer Site möchte:<span id="more-10749"></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">[ de | <a href="http://127.0.0.1/wpd.fd/color-concept">en</a> ]</div></div></div></div>



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



<ol class="wp-block-list">
<li><strong>Konzipiere das Erscheinungsbild Deiner Site</strong>.</li>



<li><strong>Wähle die entsprechenden Bootstrap-Farbcluster</strong>.</li>



<li><strong>Schreibe die Funktionsfarben entsprechend um</strong>.</li>



<li><strong>Definiere die eigenen CSS-Klassen gemäß Deines Konzeptes</strong>.</li>



<li><strong>Weise die Klassen den intendierten Elementen Deiner Website zu</strong>.</li>
</ol>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



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



<p id="colorDemo"><a href="https://getbootstrap.com/docs/5.2/customize/color/">Bootstrap hat den RGB-Farbraum in 10 Farbcluster unterteilt</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>). Jeder Cluster beginnt mit einer entsprechend hellen Farbe und geht 9 Schritten bis zu einer entsprechend fast schwarzen Farbe. Definiert sind die Farben als SASS-Variablen, für jeden Cluster nach demselben Muster. Zugreifen können wir so etwa auf ein <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>, wobei <code class="cdg">$green</code> der Farbe <code class="cdg500">$green-500</code> entspricht.</p>



<p>Wollen wir diese Farben in einem unserer Element verwenden, definieren wir in unserer Child-Themedatei <code>scss/bscore_custom.scss</code> eine CSS-Klasse <code>.cdg600 { color: $green-600; }</code> und weisen die dem intendierten HTML-Element zu, wie z.B. hier <code class="cdg600">&lt;code class="cdg600"&gt;$green-600&lt;/code&gt;</code>. Diese Technik verengt den RGB-Farbraum zwar, sie erleichtert es uns aber, farblich differenzierte und trotzdem einheitliche Themes zu erstellen.</p>



<p><a href="https://getbootstrap.com/docs/5.2/utilities/colors/">Neben der rein technischen Farbbehandlung</a> geht Bootstrap auch konzeptionell neue Wege: Es gäbe — so der Gedanke — Site-übergreifende kommunikative Aufgaben, die von verschiedenen Elementen einer Site ausgeführt werden (können). Bootstrap erlaubt es, diesen Funktionselementen typische “Funktionsfarben” zuzuordnen. Welche Elemente einer Site welche Funktion übernehmen, entscheidet die Web-Designerin — und ordnet diesen die entsprechend “Funktionsfarbe” zu.</p>



<p>Konkret geht Bootstrap davon aus, dass es in Sites typischerweise (mehrere) Elemente gibt, die Erfolg signalisieren, die abschrecken, warnen oder informieren. Oder, dass es primäre Elemente gibt, sekundäre oder teriäre<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_1_10749" id="identifier_1_10749" class="footnote-link footnote-identifier-link" title="semantisch ist dies wohl eine Abstufung der Wichtigkeit">1</a></sup>, dunkle oder helle Elemente. Für diese seitenübergreifenden kommunikativen Funktionen definiert Bootstrap ‘funktionale Farben’. Das entsprechende <a href="https://getbootstrap.com/docs/5.2/customize/color/">Bootstrap-color-Howto</a> zeigt die Vorbelegung dieser ‘Funktionsfarben’.</p>



<p>Ein Bootstrap-basiertes Theme muss also nur noch seine Elemente entsprechend der vorgesehenen Funktionen mit den zugehörigen CSS-Klassen auszeichnen, um ein minimal konsistentes Farbkonzept zu realisieren. Das hat <em>bootScore</em> vorbereitet. Allerdings verwendet es die Standard-Funktionsfarben von <em>Bootstrap</em>. So entsteht ein recht “buntes” Farbkonzept. Wir können die Farbwahl jedoch ‘entschärfen’, indem wir die CSS-Definitionen der ‘Funktionsklassen’ überschreiben und so die konzeptionell passende Farbe auf alle entsprechend markierten Elemente übertragen. <em>bootscore</em> <a href="https://bootscore.me/documentation/theme/bootstrap-css-sass/">demonstriert diesen Ansatz</a>, indem es die Primärfarbe von <em>Blau</em> auf <em>Rot</em> umsetzt — mithilfe der Zeile <code>$primary:#FF0000;</code> in der Datei <code>bscore_variables.scss</code>.</p>



<p>Dabei müssen wir den Wert der gewünschten Farbe jedoch explizit zuweisen, anstatt eine der Variablen aus den von Bootstrap definierten Farbclustern zu verwenden. Das ist nicht das, was wir eigentlich wollen. Intuitiv würden wir <code>$primary:$red;</code> schreiben. Leider ist das nicht möglich, weil die bootScore-Datei <code>bscore_variables.scss</code> vor der entsprechenden Bootstrap-Datei geladen wird.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_2_10749" id="identifier_2_10749" class="footnote-link footnote-identifier-link" title="bootScore sagt, dass es damit der Bootstrap-Richtlinie folgt.">2</a></sup>. Um also die von Bootstrap definierten und von bootScore verwendeten Funktionsfarben anzupassen, müssen wir die bestehenden Definitionen überschreiben, in denen wir explizit die Werte der beabsichtigten Clusterfarben verwenden. Dazu nutzen wir unserer Datei <code>bscore_variables.scss</code>.</p>



<p><a href="https://bootscore.me/documentation/theme/css-scss-compiler/">Die Umdefinition einer Funktionsfarbe</a> passt dann allerdings auch abgeleitete Farben an: Setzen wir die Primärefarbe auf <em>rot</em>, werden die Links rot eingefärbt, die Hintergrundfarbe der Badgets auf ein helleres Rot und deren Linktext auf ein dunkleres. <em>bootScore</em> reicht dabei ’nur’ die <a href="https://bootscore.me/documentation/bootstrap-components/">Entscheidungen von Bootstrap</a> durch.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_3_10749" id="identifier_3_10749" class="footnote-link footnote-identifier-link" title="Mehr noch: Gefragt danach, welche HTML-Elemente welcher Funktion zugeordnet sind, empfiehlt bootScore, das einfach auszuprobieren.">3</a></sup></p>



<p>Als Ausgleich für die Komplikation können wir dann alle vordefinierten Bootstrap-Variablen in unseren eigenen CSS-Definitionen verwenden, die wir in unserer Bootscore-Datei <code>bscore_custom.scss</code> definieren. Mehr noch: wir können auch die von <em>Bootstrap</em> vordefinierten CSS-Klassen (<code>text</code>|<code>bg</code>|…)<code>-</code>(<code>primary</code>|<code>secondary</code>|…|<code>danger</code>|…‘) direkt unseren HTML-Elementen zuordnen, sodass auch diese unseres Konzeptes entsprechend eingefärbt werden. Und noch weiter und feiner: Wir können auch bestehende Klassen — wie etwa die CSS-Klasse card — mit der SASS orienierten Definition <code>.card { backgroundcolor: var(--#{$prefix}dark);</code> in unserer Datei <code>bscore_custom.scss</code> auf einen schwarzen Hintergund umsetzen.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_4_10749" id="identifier_4_10749" class="footnote-link footnote-identifier-link" title="oder wie auch immer die Funktionsfarbe 'dark' gerade definiert ist">4</a></sup> Damit würden alle Karten in unseren Übersichtsdatei ‘verdunkelt’.<sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_5_10749" id="identifier_5_10749" class="footnote-link footnote-identifier-link" title="Das ginge zugegebenermaßen auch einfacher, nämlich mit der Anweisung .card { backgroundcolor: $dark}.">5</a></sup></p>



<p>Weil wir jedoch oft genug nicht alle Elemente ändern wollen, die mit vordefinierten Klassen ausgezeichnet sind, landen wir zum Schluß doch wieder bei der traditionelle Methode: wir definieren unsere eigenen Klassen, nutzen dabei Farben aus den Bootstrap-Clustern, und weisen unsere Klassen dann in den Templates den von uns intendierten Elemente zu. Und wie finden wir diese? Indem wir den Quellcode unserer bisherigen bootscore-Seiten studieren — und etwas ‘rumprobieren.</p>



<p>Um es zusammenfassen: Für einheitliches und technisch eingebundenes Farbkonzept, müssen wir</p>



<ol class="wp-block-list">
<li><strong>unsere Ziele definieren</strong> (hier:


<ul class="wp-block-list">
<li>Unsere Site soll blau-weiß-grau erscheinen = <em>in Datei _<code>bscore_variables.scss</code> einfügen:</em>
<ul class="wp-block-list">
<li><code>$primary: #0d6efd; // Wert von $blue-500</code> </li>



<li><code>$secondary: #6c757d;</code> <code>// Wert von $gray-600</code> </li>



<li><code>$info: #6ea8fe; // Wert von $blue-300</code></li>
</ul>
</li>



<li>Hervorstechende Elemente sollen violett erscheinen = <em>in Datei _<code>bscore_variables.scss</code> einfügen:</em>
<ul class="wp-block-list">
<li><code>$danger: #520dc2; // Wert von $indigo-600</code></li>



<li><code>$warning: #8540f5; // Wert von $indigo-400</code></li>
</ul>
</li>



<li>Nebensächlicher Text soll lesbar ausgegraut sein.</li>



<li>Die weißen Artikelteaser sollen schwach-blau umrandet sein = <em>in Datei _<code>bscore-sustom.scss</code> einfügen:</em> <code>.card { border-color: $blue-600; }</code></li>



<li>Die Teaser auf der Landingpage und auf den Übersichtsseiten sollen auf einem leicht blauen Hintergrund abgelegt werden. = <em>in Datei _<code>bscore-sustom.scss</code> einfügen:</em> <code>.page-template-mylap , .hfeed { background-color: $blue-100;}</code></li>



<li>Header und Footer sollen weiterhin auf grauem Hintergrund dargestellt werden.</li>
</ul>
</li>



<li><strong>die funktionalen Farben entsprechend umschreiben</strong> — in unserer Datei <code>bscore_variables.scss</code></li>



<li>unsere <strong>Siteelemente</strong> entsprechend ihrer Funktion<strong> mit den Funktionsklassen auszeichnen</strong><sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_6_10749" id="identifier_6_10749" class="footnote-link footnote-identifier-link" title="wie in u.a. Tabelle demonstriert">6</a></sup></li>



<li><strong>unsere eigenen CSS-Klassen entsprechend unserer Ziele definieren</strong> — in unserer Datei <code>bscore_custom.scss</code></li>



<li><strong>unsere Klassen den vorgesehenen Elementen unserer Site zuweisen</strong><sup><a href="https://karsten-reincke.de/farbkonzept/#footnote_7_10749" id="identifier_7_10749" class="footnote-link footnote-identifier-link" title="wie oben vorgeführt">7</a></sup></li>
</ol>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<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-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit unserer <a href="http://127.0.0.1/wpd.kr/bootscore-migration/">Migration</a> zu 
  <a href="https://bootscore.me/">bootScore</a>? Nun, einmal angefangen mit 
  <a href="http://127.0.0.1/wpd.kr/bootscore-pimpen/">Verbesserungen</a> der 
  <a href="http://127.0.0.1/wpd.kr/bilder-beschleunigen/">Bildbehandlung</a>, werden der Web-Designerin auch 
  die <a href="http://127.0.0.1/wpd.kr/verwischte-primaere-beitragsbilder/">verwischten ‘primären Beitragsgilder’</a> 
  auffallen. Sie wird Lösungen <a href="http://127.0.0.1/wpd.kr/groessere-bild-quadrate/">ausprobieren</a> 
  und <a href="http://127.0.0.1/wpd.kr/weniger-verwischte-bilder/">verfeinern</a>. Und sie wird sie u.U. 
  auch mit neuen <a href="http://127.0.0.1/wpd.kr/ganz-ohne-verwischte-bilder/">HTML‑5 Techniken</a> angehen. 
  Denn damit wird eine ausgefallenere <a href="http://127.0.0.1/wpd.kr/bilder-datenbanken/">Bildstrategie</a> samt 
  integrierter <a href="http://127.0.0.1/wpd.kr/bilderverzeichnis/">Lizenzerfüllung</a> und das eigene 
  <a href="http://127.0.0.1/wpd.kr/logos-und-favicons/">Logo</a> erst richtig sinnvoll. Wie auch immer:
  Bilder bringen Farbe ins Leseleben. Zuletzt sollte all das also auch in 
  <a href="http://127.0.0.1/wpd.kr/farbkonzept">ein eigenes Farbkonzept</a> eingebunden
  sein. Zu dieser Thematik trägt auch dieser Post etwas bei.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>
<ol class="footnotes"><li id="footnote_1_10749" class="footnote">semantisch ist dies wohl eine Abstufung der Wichtigkeit</li><li id="footnote_2_10749" class="footnote"><a href="https://github.com/orgs/bootscore/discussions/749">bootScore sagt</a>, dass es damit der Bootstrap-Richtlinie folgt.</li><li id="footnote_3_10749" class="footnote">Mehr noch: Gefragt danach, welche HTML-Elemente welcher Funktion zugeordnet sind, <a href="https://github.com/orgs/bootscore/discussions/751">empfiehlt bootScore, das einfach auszuprobieren</a>.</li><li id="footnote_4_10749" class="footnote">oder wie auch immer die Funktionsfarbe ‘dark’ gerade definiert ist</li><li id="footnote_5_10749" class="footnote">Das ginge zugegebenermaßen auch einfacher, nämlich mit der Anweisung <code>.card { backgroundcolor: $dark}</code>.</li><li id="footnote_6_10749" class="footnote">wie in u.a. Tabelle demonstriert</li><li id="footnote_7_10749" class="footnote">wie oben vorgeführt</li></ol><p>The post <a href="https://karsten-reincke.de/farbkonzept/">Das eigene Farbkonzept mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/farbkonzept/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ein sauberes Cookie-Management — mit bootScore</title>
		<link>https://karsten-reincke.de/sauberes-cookie-management/</link>
					<comments>https://karsten-reincke.de/sauberes-cookie-management/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Tue, 26 Sep 2023 08:41:00 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=9979</guid>

					<description><![CDATA[<p>Einen adäquaten Cookie-Dialog einzublenden ist das eine. Ihm eine echte Bedeutung zu geben, das andere. Denn die Abfrage allein reicht nicht. Wir müssen die Antworten unserer Leserinnen auch auswerten. Wir dürfen ausschließlich solche Cookies auf deren Rechnern ablegen, die zu schreiben sie oder das Gesetz uns erlaubt haben. Ein JavaScript-Funktion, die das gewährleistet, implementiert die [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/sauberes-cookie-management/">Ein sauberes Cookie-Management — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Einen adäquaten Cookie-Dialog einzublenden ist das eine. Ihm eine echte Bedeutung zu geben, das andere. Denn die Abfrage allein reicht nicht. Wir müssen die Antworten unserer Leserinnen auch auswerten. Wir dürfen ausschließlich solche Cookies auf deren Rechnern ablegen, die zu schreiben sie oder das Gesetz uns erlaubt haben. Ein JavaScript-Funktion, die das gewährleistet, implementiert die Semantik des Cookie-Dialogs und etabliert ein sauberes Cookie-Management.<span id="more-9979"></span></p>



<p>Das Plugin <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bs-Cookie-Settings</a> selbst liefert nur die Cookie-Abfrage. <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Wie man die aktiviert</a>, hatte ich bereits beschrieben. Die entsprechende Semantik zu implementieren, sieht <a href="https://bootscore.me/">bootScore</a> als <a href="https://github.com/orgs/bootscore/discussions/559">Aufgabe der jeweiligen Web-Designerin</a>. Hier eine Variante,  die gern allgemein wiederverwendet werden darf:</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">[ de | <a href="http://127.0.0.1/wpd.fd/properly-managed-cookies">en</a> ]</div></div></div></div>



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



<ul class="wp-block-list">
<li>Lade die <a href="https://github.com/js-cookie/js-cookie">JS-Cookie-Bibliothek</a> von z.B. cdnpkg.com herunter und lege sie (entpackt) unter dem Namen   <code>js/js.cookie.min.js</code> in Deinem Child-Theme-Ordner ab.</li>



<li>Erweitere in Deiner Datei <code>functions.php</code> die Funktion  <code>bootscore_child_enqueue_styles()</code> um den Eintrag</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>Erweitere die Datei <code>js/custom.js</code> Deines Child-Themes so:</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> Hintergrund</h2>



<p>Cookies könnten wir <a href="https://www.w3schools.com/js/js_cookies.asp">mit nativem Javascript setzen</a> und evaluieren. Mit fertigen Bibliotheken geht es einfacher. WordPress bringt <a href="https://wpengine.com/resources/how-to-add-jquery-wordpress-theme/">jQuery bereits mit</a>. Und <em>bootScore </em>hat dies schon aktiviert und uns eine Möglichkeit geschaffen, eigene JavaScript-/JQuery-Funktionen in unser <a href="https://bootscore.me/documentation/bootscore-child/#JavaScript">bootScore-Childtheme</a> einzubauen.</p>



<p>Früher gab es für das Cookie-Management ein echtes <a href="https://plugins.jquery.com/cookie">jQuery-cookie</a> Plugin. Das ist mittlerweile archiviert und in eine von jQuery unabhängige Javascript-Bibliothek <a href="https://github.com/js-cookie/js-cookie">js-cookie</a> überführt worden. Um die zu nutzen, laden wir Datei js-cookie-min.js herunter und legen sie im JavaScript-Ordner unseres Child-Themes ab. Außerdem erweitern wir die Funktion <code>bootscore_child_enqueue_styles()</code> in unser Datei <code>functions.php</code> so, dass die Bibliothek <code>js/js.cookie.min.js</code> auch geladen wird.</p>



<p>Den Algorithmus zur Evaluation der Cookie-Settings implementieren wir danach in der Datei <code>js/custom.js</code>. Er wirkt so:</p>



<ul class="wp-block-list">
<li>Zuerst versuchen wir den vom bs-Cookie-Plugin unter dem Namen <code>bs_cookie_settings</code> abgelegten Cookie zu lesen.</li>



<li>Wenn es ihn noch nicht gibt, hat unsere Leserin der Nutzung von Cookies noch nicht zugestimmt. Also dürfen wir noch keine schreiben.((Übrigens auch die technisch notwendigen nicht. Die dürfen wir zwar von gesetzeswegen ablegen, wir müssen unsere Leserin aber zuvor informieren, dass wir das tun. Und dass wir das getan haben, können wir wiederum anhand des Cookies  <code>bs_cookie_settings</code> ‘belegen’. ))</li>



<li>Sobald unsere Leserin den Cookie-Dialog in welchem Umfang auch immer ‘bestätigt’ hat, legt das bs-Cookie-Plugin den Cookie  <code>bs_cookie_settings</code> ab. Sein Wert enthält ein JSON-Objekt: </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>Das müssen wir also erst parsen lassen, bevor wir — auf JavaScript-Ebene — auf die Liste der erlaubten Cookie-Gruppen via <code>allowedCookies.level</code> zugreifen und über die Methode <code>includes</code> eines Listenobjektes abfragen können, welche der Cookie-Gruppen <em>necessary</em>, <em>analytics</em> und /oder <em>advertising</em> uns unsere Leserin zu schreiben erlaubt hat.</li>



<li>Und zu jeder zugelassen Gruppen schreiben wir dann die entsprechenden Cookies.((wobei wir uns bei den technisch notwendigen Cookies auf die gesetzliche Erlaubnis berufen.))</li>
</ul>



<p>Und ein letzter Tipp noch: JavaScript erzeugt Seiten dynamisch. Gecacht werden die Ergebnisse. Deshalb müssen wir gelengtlich den Cache löschen, um die Ergebnisse unserer Veränderungen sehen zu können. </p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang … </h5>
  <p class="myPageContext">… steht das mit unserer <a href="http://127.0.0.1/wpd.kr/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun, zuletzt muss die Web-Designerin 
  <a href="http://127.0.0.1/wpd.kr/bootscore-pimpen/">im Rahmen ihrer Anpassungen</a> auch 
  rechtliche Vorgaben beachten, seien es die der
  <a href="http://127.0.0.1/wpd.kr/datenschutz-dsgvo/">DSGVO</a>, die für eine
  <a href="http://127.0.0.1/wpd.kr/saubere-cookie-nutzung/">Cookie-Zustimmung</a> und deren
  <a href="http://127.0.0.1/wpd.kr/sauberes-cookie-management/">Beachtung</a> oder die zur 
  <a href="http://127.0.0.1/wpd.kr//">Erstellungen</a> einer
  <a href="http://127.0.0.1/wpd.kr/datenschutz/">Datenschutzerklärung</a>.
  In diesen Kontext gehören dann auch die Fragen nach dem 
  <a href="http://127.0.0.1/wpd.kr/bilderverzeichnis/">Zweck</a> eines 
  <a href="http://127.0.0.1/wpd.kr/bildnachweise/">Bildverzeichnisses</a>, nach einem
  <a href="http://127.0.0.1/wpd.kr/impressum/">adäquaten Impressum</a> oder nach einer hinreichenden
  <a href="http://127.0.0.1/wpd.kr/license-compliance/">Open-Source-Lizenzerfüllung</a>.
  Dies ins rechte Licht zu rücken, will auch dieser Post unterstützen.</p> 
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/sauberes-cookie-management/">Ein sauberes Cookie-Management — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/sauberes-cookie-management/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ein sauberer Cookie-Dialog — mit bootScore</title>
		<link>https://karsten-reincke.de/saubere-cookie-nutzung/</link>
					<comments>https://karsten-reincke.de/saubere-cookie-nutzung/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Fri, 15 Sep 2023 11:44:35 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=9887</guid>

					<description><![CDATA[<p>Wir dürfen Cookies nicht einfach so auf die Festplatte einer Leserin schreiben (lassen). Denn die gehört ihr, nicht uns. Für die Cookies, die technisch notwendig sind, hat sie mit dem Abruf unserer Seite zwar konkludent ihr Einverständnis gegeben. Denn sie wollte unseren Blogbeitrag ja lesen. Die anderen Cookies dürfen wir jedoch nur dann auf ihrem [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Ein sauberer Cookie-Dialog — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.e-recht24.de/tracking-cookies/8451-hinweispflicht-fuer-cookies.html">Wir dürfen Cookies nicht einfach so auf die Festplatte einer Leserin schreiben (lassen)</a>. Denn die gehört ihr, nicht uns. Für die Cookies, die technisch notwendig sind, hat sie mit dem Abruf unserer Seite zwar konkludent ihr Einverständnis gegeben. Denn sie wollte unseren Blogbeitrag ja lesen. Die anderen Cookies dürfen wir jedoch nur dann auf ihrem Rechner speichern, wenn unsere Leserin es uns explizit erlaubt hat. Und bevor sie das tut, muss sie abfragen können, was die Cookies tun. Dazu dient uns ein sauberer Cookie-Dialog.<span id="more-9887"></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">[ de | <a href="http://127.0.0.1/wpd.fd/properly-used-cookies">en</a> ]</div></div></div></div>



<p>Den brauchen wirt nicht selbst zu entwickeln . Denn <a href="https://bootscore.me/">bootScore</a> liefert uns mit seinem Plugin <a href="https://bootscore.me/#download">bsCookie</a> einen <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">konfigurierbaren Dialog</a> auf der Höhe der Zeit:</p>



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



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



<li>Installiere die Zip-Datei über das Plugin-Management Deines WordPress-Backends.</li>



<li>Ermittle die Cookies, die Du auf dem Rechner Deiner Leserin installieren willst.((Wir müssen dabei bedenken, dass auch unsere Plugins Cookies ablegen lassen können. Es reicht also nicht, nur nach den entsprechenden JavaScript-Befehlen in unseren eigenen Posts und Pages zu suchen.))</li>



<li>Ordne jeden dieser Cookies der Gruppe ’<em>necessary</em>’((Cookies, die wir dieser Gruppe zuordnen, werden zuletzt auch ohne explizite Zustimmung auf der Festplatte unserer Leserin abgelegt, eben weil sie technisch notwendig sind. So müssen wir notfalls auch beweisen können, dass diese Cookies tatsächlich technisch notwendig sind.)), ‘<em>advertising</em>’ oder ‘<em>analytics</em>’ zu.</li>



<li>Ziehe im Dialog ‘Appearance/Widgets’ ein Widget ‘Customer HTML’ in die Widget-Gruppe <em>Footer‑4</em></li>



<li>Trage dort die Scriptzeilen ein, wie sie die <a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bsCookie-Dokumentation</a> offeriert.</li>



<li>Erzeuge für jedes Deiner Plugins in der entsprechenden Sektion einen Eintrag.</li>



<li>Verlinke Deine Datenschutzseite in den Dialog, indem Du <em>#yourprivacypolicy</em> entsprechend ersetzt.</li>



<li>Übersetze die Texte in die Sprache Deiner Site (bzw. erzeuge einen zusätzlichen Eintrag gemäß Deiner Mehrsprachigkeitsstrategie)</li>
</ul>



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



<p>Das Schreiben der Cookies über einen Dialog erlauben zu lassen, ist nur die eine Seite der Medaille. Denn Cookies können auch (personen-bezogene) (Wiedererkennungs-) Daten speichern, die auf Serverseite akkumuliert und an externe Stellen weitergereicht werden. Deshalb müssen wir solche Cookies außerdem in unserem <a href="https://karsten-reincke.de/datenschutz/">Datenschutzkonzept</a> erwähnen. Damit unsere Leserin dies auch direkt aus dem Cookie-Zustimmugsdialog heraus ausrufen kann, bietet der <em>bsCookie</em>-Dialogtext einen Link, dessen Wert <em>#yourprivacypolice</em> wir entsprechend (um)setzen dürfen.</p>



<p>Es ist mittlerweile gute Tradition, Cookies funktionsbezogen zu gruppieren und für die Gruppen als solche zu fragen, ob die ihr zugeordneten Cookies lokal abgelegt werden dürfen. Rechtlich notwendig ist so ein Clustern nicht. Wir könnten unsere Leserin die Nutzung von Cookies auch ganz generell erlauben oder ablehnen lassen.((Eine stärkere Granularität liegt aber in unserem Interesse. Denn möchte eine Leserin das eine nicht — z.B. Advertising -, könnte sie das andere — z.B. Analytics — immer noch erlauben. Damit würden wir wenigstens noch einen Teil dessen erfahren, was wir insgesamt zu erfahren hofften.)) Oder wir könnten  jeden einzelnen Cookie an- oder abwählbar machen — und den Dialog damit überfrachten.</p>



<p>Wie dem auch sei: Erstmal müssen wir natürlich wissen, welche Cookies unsere Site schreibt und was diese tatsächlich tun. Welche es sind, können wir uns über die Browser anzeigen lassen. Etwa mittels seines ‘Privacy and Security’-Dialoges. Oder mit Hilfe eines Browser-Plugins((z.B. mit dem <a href="https://cookie-editor.cgagnier.ca/">Cookie Editor</a>)), das direkt für jede aufgerufene Site/Seite anzeigt, welche Cookies von ihr geschrieben worden sind. Was unsere Cookies tun, müssen wir dagegen gesondert ermitteln.</p>



<p>Haben wir diese Cookies dann funktional sortiert, brauchen wir im bsCookie-Dialog nur noch die entsprechenden Gruppen als Sektionen anzulegen und in diese für jedes zugehörige Cookie einen Eintrag zu erzeugen. Für die drei gängigen Gruppen ’necessary’, ‘advertising’ und ‘analytics’ bringt <em>bsCookie</em> die nötigen Codegruppen immer schon mit. Hier reicht es mithin, die Cookies in und mit den Einzeleinträgen zu beschreiben. Gesetzt, wir wollten die drei Cookies <em>bsNec­es­saryCook­ie</em>, <em>bsAdver­tis­ing­Cook­ie</em>, und <em>bsAnal­iz­ing­BCook­ie</em> gesetzeskonform ablegen lassen, müsste der Code für den <em>bsCookie-Dialog</em> so aussehen:</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: 'de',
      autoclear_cookies: true,
      page_scripts: true,

      languages: {
        'de': {
          consent_modal: {
            title: 'Cookie-Zumstimmung:',
            description: 'Wir nutzen Cookies, um Deine Entscheidungen bei zukünftigen Besuche wiederzuverwenden. Wenn Du auf "Alle akzeptieren" klickst, dürfen wir alle Cookies verwenden, die technisch notwendigen und die funktionell hilfreichen. Wenn Du auf "nur notwendige" klickst, untersagst Du uns, die  funktionell hilfreichen Cookies zu verwenden. Eine feinere Auswahl bieten Dir unsere expliziten &lt;a data-bs-toggle="modal" href="#bs-cookie-modal"&gt;Cookie-Einstellungen&lt;/a&gt;.',
            primary_btn: {
              text: 'alle akzeptieren',
              role: 'accept_all'
            },
            secondary_btn: {
              text: 'nur notwendige',
              role: 'accept_necessary'
            }
          },

          settings_modal: {
            title: 'Cookie-Einstellungen',
            save_settings_btn: 'Auswahl sichern',
            accept_all_btn: 'alle akzeptieren',
            reject_all_btn: 'nur notwendige',
            close_btn_label: 'schließen',
            cookie_table_headers: [
              { col1: 'Name' },
              { col2: 'Domain' },
              { col3: 'Verfall' },
              { col4: 'Beschreibung' }
            ],
            blocks: [
              {
                title: 'Cookie-Nutzung',
                description: 
'Wir verwenden Cookies, um zentrale Funktionen unserer Website bereitzustellen und Dein Leseerlebnis zu verbessern. Du kannst für jede Cookie-Gruppe entscheiden, ob Du sie zulässt oder nicht. Weitere Einzelheiten zu Cookies und anderen sensiblen Daten findest Du in unserem &lt;a href="http://karsten-reincke.de/datenschutz"&gt;Datenschutzkonzept&lt;/a&gt;.'
              }, {
                title: 'Notwendige',
                description: 
'Diese Cookies sind essentiell für unsere Website. Ohne sie würde die Site nicht richtig funktionieren.',
                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: 'wird gelöscht wenn Deine Session beendet wird',
                    col4: 
'Darin speichert bootScore bzw. das Plugin "bsCookies" Deine Cookie-Einstellungen',
                    is_regex: false
                  },
                  {
                    col1: 'bsNec­es­saryCook­ie', 
                    col2: 'http://karsten-reincke.de/',
                    col3: 'nach 100 Tagen',
                    col4: 'Demo-Cookie für "pimp your BootScore"',
                    is_regex: false
                  },                 
                ]
              }, {
                title: 'Analytics',
                description: 
'Diese Art der Cookies erlaubt es uns, Deine Entscheidungen beim nächsten Mal wiederzuverwenden.',
                toggle: {
                  value: 'analytics',     // your cookie category
                  enabled: false,
                  readonly: false
                },
                cookie_table: [           // list of all expected cookies
                  {
                    col1: 'bsAnal­iz­ing­Cook­ie',         
                    col2: 'http://karsten-reincke.de/',
                    col3: 'nach 10 Tagen',
                    col4: 'Demo-Cookie für "pimp your BootScore"',
                    is_regex: false
                  }
                ]
              }, {
                title: 'Advertising',
                description: 
'Solche Cookies vermerken, wie Du unsere Website verwendest, welche Seiten Du besuchts und welche Links Du anklickst. Alle Informationen sind anonymiziert und können nicht benutzt werden, um Dich zu identifizieren.',
                toggle: {
                  value: 'advertising',
                  enabled: false,
                  readonly: false
                },
                cookie_table: [             // list of all expected cookies
                  {
                    col1: 'bsAdver­tis­ing­Cook­ie',
                    col2: 'http://karsten-reincke.de/',
                    col3: '2 Wochen',
                    col4: 'Demo-Cookie für "pimp your BootScore"',
                    is_regex: false
                  }
                ]
              }, {
                title: 'Weitere Informationen',
                description: 
'Bei weiteren Fragen zu unserem Daten-Management, kontaktiere &lt;a href="http://karsten-reincke.de/impressum"&gt;uns&lt;/a&gt; einfach.',
              },

            ]
          }

        }
      }

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



<p>Die Informationen in den Cookie-Zustimmungsdialogs einzubauen, ist das eine. Seinen Code zu aktivieren, das andere. Den angepassten <em><a href="https://bootscore.me/documentation/plugin/bs-cookie-settings/">bs-cookie-settings</a></em>-JavaScript-Code tragen wir dazu in ein <em>Custom-HTML-Element</em> ein, das wir dem Widget <em>Footer 4</em> hinzugefügt haben. Prinzipiell könnten wir das <em>Custom-HTML-Element</em> auch in andere Widgets einbetten. <em>bsCookie</em> schlägt <em>Footer 4</em> vor, weil der JavaScript-Code so eher am Ende einer Seite eingebettet und damit direkt ausgeführt wird. Wie auch immer, der Cookie-Zustimmungsdialog wird dann beim Aufruf all der Seiten angezeigt, deren Templates den <em>Footer 4</em> verwenden. Das Problem der ‘Deep-Links’((Es reicht nicht aus, nur unsere Einstiegsseite den Zustimmungsdialog anzeigen zu lassen. Denn gelegentlich reichen unsere Leserinnen auch Links auf tiefer eingebettete Seiten herum. Unsere Site muss auch in deisen Fällen erst um Erlaubnis bitten, bevor sie die Cookies ablegt.)) ist also gelöst, wenn jede Seite ein Template verwendet, das den entsprechenden JavaScript-Code enthält.</p>



<p>Blieben uns noch drei letzte Aufgaben:</p>



<ul class="wp-block-list">
<li>Zum ersten werden wir unseren Zustimmungsdialog oft auch sprachlich anpassen wollen. Auch das geht über die ‘Umprogrammierung’ des erwähnten JavaScript-Codes.</li>



<li>Über <a href="https://karsten-reincke.de/farbkonzept/">das funktionalen Farbkonzept von Bootscore/bootStrap</a> ist der Cookie-Dialog auf ‘Warning’ eingestellt. Wer ihn dennoch anders gestalten will, kann das in ihrer Datei <code>_bscore_custom.scss</code> so tun: <pre class="wp-block-code"><code>// 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></code></pre></li>



<li>Zum dritten müssen wir die <a href="https://karsten-reincke.de/ein-sauberes-cookiemanagement-mit-bootscore/">Semantik des Cookie-Zustimmungsdialoges implementieren</a>. Wenn wir mehr als nur reden wollen, müssen wir unseren ‘Schreibe-Cookie-JavaScript-Code’ so anlegen, dass er ohne Zustimmung nur die technischen notwendigen Cookies schreibt und dass er ansonsten nur die Cookies aus den Gruppen ablegt, für die eine Zustimmung vorliegt.</li>
</ul>



<p>Diesen letzten Punkt werde ich <a href="https://karsten-reincke.de/ein-sauberes-cookiemanagement-mit-bootscore/">in einem gesonderten Post aufgreifen</a> …</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang … </h5>
  <p class="myPageContext">… steht das mit unserer <a href="http://127.0.0.1/wpd.kr/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun, zuletzt muss die Web-Designerin 
  <a href="http://127.0.0.1/wpd.kr/bootscore-pimpen/">im Rahmen ihrer Anpassungen</a> auch 
  rechtliche Vorgaben beachten, seien es die der
  <a href="http://127.0.0.1/wpd.kr/datenschutz-dsgvo/">DSGVO</a>, die für eine
  <a href="http://127.0.0.1/wpd.kr/saubere-cookie-nutzung/">Cookie-Zustimmung</a> und deren
  <a href="http://127.0.0.1/wpd.kr/sauberes-cookie-management/">Beachtung</a> oder die zur 
  <a href="http://127.0.0.1/wpd.kr//">Erstellungen</a> einer
  <a href="http://127.0.0.1/wpd.kr/datenschutz/">Datenschutzerklärung</a>.
  In diesen Kontext gehören dann auch die Fragen nach dem 
  <a href="http://127.0.0.1/wpd.kr/bilderverzeichnis/">Zweck</a> eines 
  <a href="http://127.0.0.1/wpd.kr/bildnachweise/">Bildverzeichnisses</a>, nach einem
  <a href="http://127.0.0.1/wpd.kr/impressum/">adäquaten Impressum</a> oder nach einer hinreichenden
  <a href="http://127.0.0.1/wpd.kr/license-compliance/">Open-Source-Lizenzerfüllung</a>.
  Dies ins rechte Licht zu rücken, will auch dieser Post unterstützen.</p> 
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Ein sauberer Cookie-Dialog — mit bootScore</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/saubere-cookie-nutzung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mein ‘googlierter’ Schreibstil</title>
		<link>https://karsten-reincke.de/schreibgestaltung/</link>
					<comments>https://karsten-reincke.de/schreibgestaltung/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sat, 26 Aug 2023 16:20:00 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=9821</guid>

					<description><![CDATA[<p>Beim letzten Mal tat’s nicht mehr weh: Binnen zweier Tage war mein Post über meinen ‘Reset’ wegen mangelnder ‘Innere Verlinkung’ und über den ‘richtigen Weg, gecrawlt und indexiert zu werden’ von Google verarbeitet worden. Wieder hatte ich ihn YOAST-gemäß gestaltet. Und damit auch Googles ‘unausgesprochenen’ Vorgaben berücksichtigt. Denn das ist ja der Anspruch von YOAST. [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/schreibgestaltung/">Mein ‘googlierter’ Schreibstil</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Beim letzten Mal tat’s nicht mehr weh: Binnen zweier Tage war mein Post über meinen ‘Reset’ wegen mangelnder ‘Innere Verlinkung’ und über den ‘richtigen Weg, gecrawlt und indexiert zu werden’ von Google verarbeitet worden. Wieder hatte ich ihn YOAST-gemäß gestaltet. Und damit auch Googles ‘unausgesprochenen’ Vorgaben berücksichtigt. Denn das ist ja der Anspruch von YOAST. Allerdings bin ich damit auch eingeknickt vor der stilistischen Übermacht von Google und YOAST:<span id="more-9821"></span></p>



<p>Um die Konsequenzen ihres Diktats zu verstehen, hier zuerst noch einmal meine aus dem YOAST-Angebot extrahierten 11 Gebote, mit deren Umsetzung ich YOAST bisher stets grüne Ampeln abringen konnte, eine für ‘SEO’ und eine für die Lesbarkeit. Unnötig zu erwähnen, dass ich di so aufbereiteten Seiten Google habe erfolgreich zum Indexieren((als Einzellinks via Search-Konsole, nicht per Sitemap allein)) übergeben können.</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">[ de | <a href="http://127.0.0.1/wpd.fd/writing-style">en</a> ]</div></div></div></div>



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



<ul class="wp-block-list">
<li>Definiere Dir eine Key-Phrase, die das Topik Deiner Seite((Der <em><a href="https://wolf-of-seo.de/was-ist/fokus-keyphrase/">wolf-of-seo</a></em> sagt, dass die Key-Phrase nicht erfassen sollte, worum es in Deinem Beitrag gehe, sondern wofür er perfekt sei. Wendet man jedoch die Regeln 2 und 3 an, schrumpft der Unterschied zwischen diesen Standpunkten erheblich.)) wiedergibt.((Achtung: 2 Wörter, allenfalls drei. Denn diese Key-Phrase muss in dieser Form an den Anfang des Titels passen und auch in den Fließtext eingebunden werden können. Vertraue nicht darauf, dass YOAST die syntaktischen Feinheiten der deutschen Sprache analysieren kann — auch wenn es das zu tun verspricht.))</li>



<li>Setze die Key-Phrase((so, wie definiert)) an den Anfang Deines Seitentitels.((Wenn Du den so entstehenden slug’ Deiner Seite verkürzt, bleibe in Deiner URL wenigstens bei sprechende Syntagmen.))</li>



<li>Integriere diese Key-Phrase((so, wie definiert)) in den ersten Absatz Deiner Seite.</li>



<li>Baue die Key-Phrase((möglichst so, wie definiert)) in die mindestens 120 und höchstens 156 Zeichen lange Meta-Description Deiner Seite ein.</li>



<li>Verlinke Deine Seite auf andere Seiten Deines Blogs zu dem Thema.</li>



<li>Verlinke Deine Seite auf fremde Seiten zu dem Thema.</li>



<li>Schreibe nur wenig Sätze mit mehr als 25 Wörtern.</li>



<li>Nutze (logische) Konjunktionen, um (kurze) (Haupt)Sätze miteinander zu verknüpfen.</li>



<li>Lasse Deine Absätze nicht über 150 Wörter ‘anschwellen’, bleib aber auf jeden Fall unter 200.</li>



<li>Nutze nur wenig Passivkonstruktionen, mache aktive Aussagen.</li>



<li>Beantrage in der Search-Konsole für Deine neue Seite explizit, dass Google sie indexiert((Verlass Dich nicht nur auf Deine aktualisierte Sitmap.))</li>
</ul>



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



<p>Eins gleich vorab: Wem jetzt schon schwant, dass dieser Post diesen Geboten nicht so richtig folgt, dem sei gleich gesagt: Yeep. Absichtlich. Testen wir doch einfach mal, was passiert, wenn wir unsere Posts nicht dem vereinheitlichenden Diktat von Google und YOAST unterwerfen.</p>



<p>Aus diesen ‘Empfehlungen’ ergibt sich nämlich ein anderer Schreibstil, als er Dir und mir (gelegentlich) vorschwebt. Dass passive Satzkonstruktionen schwieriger zu verstehen sind und damit mehr Lese<strong>arbeit</strong> erfordern, ist nachvollziehbar.((Wer’s nicht glaubt’, mag sich bewusst durch diesen absichtlich passivierten Absatz ‘quälen’)) Dass unser Lese(er)leben durch kurze Sätze erleichtert wird, ebenso. Werden wir von den Suchmaschinen gezwungen, so zu schreiben, tun sie unseren Leserinnen etwas Gutes. Auch wenn wir über die Drohung, unsere Texte würden nicht indexiert, ’sanft’ vom akademischen Schreibstil weggebracht werden. </p>



<p>Dies ärgert mich also nicht. Die Sache mit der Key-Phrase aber schon. Denn die verhindert, dass ich mit einem nur andeutenden Titel Leselust wecken und seine konkrete Bedeutung und seinen Kontext erst aus den ersten Sätzen erwachsen lassen kann. Freie Fahrt den Assoziationen — damit arbeite ich gern. Eigentlich. Darf es aber nicht, wenn ich die Gebote befolgen will. Ein Beispiel: Früher hatte ich meinen Artikel ‘Wolken und Listen — Zwei auf einen Streich!’ nur ‘Zwei auf einen Streich’ betitelt — und damit sogar ein wenig assoziative Nähe zum ‘tapferen Schneiderlein’ hergestellt.((Auch wenn mir das jetzt, wo ich das Märchen noch einmal ganz gelesen habe, selbst etwas unangenehm aufstößt. Es ist schon ein arger Blender, das kleine Schneiderlein, nicht nur ein Schlitzohr. Eigentlich kein Kontext, in den ich mich eingeordnet wehen möchte.)) Nur <em>Zwei auf einen Streich</em>, das ist ein eleganter Titel. Ihm die Key-Phrase ‘Wolken und Listen’ voranzustellen, nimmt dem Titel den Witz und macht ihn sperrig. Und spätestens, wenn wir die Key-Phrase im ersten Absatz noch einmal wiederholen, werden wir zu aufdringlichen Plapperinnen — nur um unsere grünen YOAST-Ampeln zu bekommen, will sagen: um indexiert zu werden.</p>



<p>Als ein aus SEO Sicht gutes Beispiel mag die Seite <a href="https://wolf-of-seo.de/was-ist/fokus-keyphrase/">https://wolf-of-seo.de/was-ist/fokus-keyphrase/</a> betrachtet werden. Hier wird die Key-Phrase <em>Fokus Keyword</em> an den Anfang des Titels gestellt und gleich noch einmal im ersten, sehr kurzen Absatz wiederholt — zusammen mit ihrem Zwilling <em>Fokus Keyphrase</em>. Und in den ersten 6 Sätzen((was hier gleichbedeutend ist mit: in den ersten 6 Absätzen)) kommen die dann mehr als 10 ‘mal vor. Der ‘wolf of seo’ wird keine Schwierigkeit gehabt haben, seine Seite indexiert zu bekommen. Und mehr noch: inhaltlich ist dieser Artikel richtig gut! Nur stilistisch — stilistisch ist er grottig. Lest ihn einfach mal langsam, und Euch fällt dieses redundante Wortgeklingel sicher auch auf. Das Ärgerliche an dem Diktat einer guten SEOzität ist, dass wir offensichtlich so schreiben müssen, wenn wir indexiert werden wollen. Denn nur das, was indexiert ist, kann ja überhaupt gefunden und gerankt werden.</p>



<p>Habt Ihr den ’seo-wölfischen’ Text langsam gelesen, lest auch meinen Artikel so. Und es wird Euch direkt auffallen, dass er noch viel grottiger ist, als jener. Ich habe hier nämlich absichtlich viele der o.a. Gebote verletzt:</p>



<ul class="wp-block-list">
<li>Meine Key-Phrase ‘StilXpolizei’ kommt weder im Titel noch im ersten Absatz oder sonst wo vor, also auch nicht im slug.((Ich kann das Wort nicht riochtig schreiben, sonst meint YOAST: ”The keyphrase was found 1 time. That’s less than the recommended minimum of 3 times for a text of this length.”))</li>



<li>Ich habe eine ‘Metadescription’ eingebaut, die absichtlich zu kurz ist und am Thema vorbeigeht.((Einfach mal den Sourcecode ansehen.))</li>



<li>Dieser Post verwendet zwar Links nach extern, aber keine auf andere Seiten meiner Site.</li>



<li>Mein Text verwendet zu viele Passivkonstruktionen((“15% of the sentences contain passive voice”)) und hat einen zu langen Absatz.((“1 of the paragraphs contains more than the recommended maximum of 150 words.”))</li>
</ul>



<p>So bekomme ich für diesen Post eine orange YOAST-Ampel in Sachen SEO und eine rote in Sachen Lesbarkeit. </p>



<p>Damit können wir jetzt einfach mal testen, wie lange Google braucht, um diesen Artikel zu indexieren.((Um nicht Birnen mit Äpfeln zu vergleichen, werde ich Google zuerst nur über die Sitemap von dem neuen Post informieren. Und erst nach ein paar Monaten beantrage ich bei Google die Indexierung dieses Posts auch manuell.)) Sobald er im Index aufgenommen worden ist, sage ich Euch hier Bescheid. Ihr könnt es aber auch selbst testen. Sucht einfach nach SEOzität. Das Wort gibt es nämlich (bisher) nur in diesem Artikel.</p>



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



<ul class="wp-block-list">
<li>Sitemap aktualisiert: 2023-08-27 / evaluiert: 2023-08-28 </li>



<li>Post gefunden: 2023-08-28 / gecrawlt: 2023-08-28  / indexiert: 2023-08-28  </li>
</ul>



<p>Erstaunlich. So schnell. Ohne manuelle Bitte um Indexierung, ohne innere Verlinkung.  Und das englische Pendant ist am 30.08. immer noch nicht gefunden, gecrawlt</p>



<hr class="wp-block-separator has-alpha-channel-opacity">
<p>The post <a href="https://karsten-reincke.de/schreibgestaltung/">Mein ‘googlierter’ Schreibstil</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/schreibgestaltung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Innere Verlinkung — ein Reset</title>
		<link>https://karsten-reincke.de/innere-verlinkung/</link>
					<comments>https://karsten-reincke.de/innere-verlinkung/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 23 Aug 2023 09:40:21 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=9769</guid>

					<description><![CDATA[<p>Zweimal hatte ich bereits über ‘SEO’ geschrieben. Alles halb so schlimm, hatte ich gemeint. bootScore zeichne seine Seiten dankenswerterweise ja von Haus aus mit semantischen HTML-Tags aus. Es reiche also, die eigene Sitemap bei Google &#38; Co einzureichen. Die darin erfassten Seiten noch mit Keywords anzureichern, sei nicht nötig, wenn nicht gar schädlich. Denn das [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/innere-verlinkung/">Innere Verlinkung — ein Reset</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Zweimal hatte ich bereits über ‘SEO’ geschrieben. Alles halb so schlimm, hatte ich gemeint. <a href="https://bootscore.me/">bootScore</a> zeichne seine Seiten dankenswerterweise ja <a href="https://karsten-reincke.de/bootscore-plus-seo/">von Haus aus mit semantischen HTML-Tags</a> aus. Es reiche also, die eigene Sitemap bei Google &amp; Co einzureichen. Die darin erfassten Seiten noch mit Keywords anzureichern, sei nicht nötig, wenn nicht gar schädlich. Denn das lege ja eh nur einen zweiten Text hinter den eigentlichen. Sei dieser inhaltlich gut, reiche das. Dachte ich. Und meinte, die innere Verlinkung gar nicht ansprechen zu müssen. Selten hat mich Google auf peinlichere Weise eines Besseren belehrt:<span id="more-9769"></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">[ de | <a href="http://127.0.0.1/wpd.fd/internal-linking">en</a> ]</div></div></div></div>



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



<ul class="wp-block-list">
<li>Ersetze alle schematischen Slugs durch sprechende.</li>



<li>Verlinke jeden Post und jede Seite mit allen anderen internen verwandten Posts oder Seiten.</li>



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



<li>Setze so viele seiner Verbesserungsvorschläge um, dass seine Ampeln auf grün springen.</li>



<li>Beantrage bei Google für jede Seite und jeden Post gesondert die Indexierung.</li>
</ul>



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


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



<p>Was hatte mich zu dieser Einsicht getrieben? Nach der Anmeldung meiner Sitemap irgendwann im April hatte Google in 3 Monaten nur 6 meiner 109 Seiten indexiert. Über deren Qualität hatte es nicht gemeckert. Nur schlicht verkündet, dass es 81 Seiten oder Posts zwar gefunden und 17 zwar gecrawlt, aber nicht indexiert habe. Offensichtlich hielt Google meine Texte des Indexierens nicht für würdig. Trotz meines an sich ja interessanten Themas ‘bootScore’. Und trotz der ja immerhin so relevanten Artikel, dass sie das Projekt ‘bootScore’ zu Verbesserungen angeregt hatten. Über ein gutes Ranking brauchte ich also vorerst nicht nachzudenken. Ich musste mich ‘findbar’ machen.</p>



<p>Es hat mich eine Weile gekostet, zu verstehen, was passiert war. Und noch eine größere, es zu bereinigen:</p>



<p>Mit meiner Migration nach bootScore wollte ich auch meine Site verdichten. Sie leserinnen-freundlicher gestalten. Ihr die Redundanz austreiben. Weniger Schnick-Schnack sollte sie enthalten. Darum hatte ich meine thematischen Cluster sauber auf Kategorien und Tags abgebildet und denen meine Texte zugeordnet. Denn bootScore bot ja von Haus aus auf jeder Seite an, sich für jedes Schlagwort die zugehörigen Artikel anzeigen zu lassen. Warum also sollte ich in den einzelnen Seiten/Posts zusätzlich auf thematische verwandte Seiten/Posts verweisen? Warum händisch Seiten und Posts verlinken? Zu viel Schnick! Und warum sollte ich in mein Menü einzelne Seiten oder Posts einhängen? Zu viel Schnack! Ein Leitsystem aus den Kategorien und Tags sollte reichen. Damit hätten meine Leserinnen immer auf die zu diesem Thema auch relevanten Artikel zugreifen können. Eine zusätzliche ‘innere Verlinkung’ im Text, das wäre doch redundant. Dachte ich.</p>



<p>Genau das aber sieht Google anders! Seiten, auf die nicht einmal andere eigene Seiten verlinken, sind doch offensichtlich nicht einmal der Autorin wichtig. Sonst würde sie doch ihre Leserinnen dahinführen wollen. Warum also sollte Google sie indexieren? Darauf hatten meine Lehrbücher immer schon hingewiesen.((Pars pro toto: vgl. Czysch, Stephan: SEO mit Google Search Console, 2. Aufl., Heidelberg 2017, S. 168ff)) Mein Fehler, es zu ignorieren.</p>



<p>Wie der Fehler, meine Beiträge mit nichtssagenden ‘Slugs’ zu gruppieren. Wenn ich — zum Beispiel — ein Cluster ‘image’ benutzte, dachte ich, ich könnte meine Beiträge ‘image‑a’ , … ‘image‑i’. So hatte ich die gleichen Seitennamen auf der deutschen und der englischen Site. An sich keine schlechte Idee. Nur veranlasste da Google dazu, die Beiträge für unwichtig zu halten.((pars pro toto: vgl. Dziki, Julian: Suchmaschinenoptomierung für dummies, 2. Aufl., Weinheim 2021, S. 62)) Sie waren mir ja nicht mal einer Botschaft wert.</p>



<p>Nachdem ich diese Nebeneffekte verstanden hatte, überarbeitete ich alles. Ich ersetzte die symbolischen Seitennamen durch sprechende. Ich installierte YoastSeo und setzte so viele seiner Maßnahmen zu den Themen ‘SEO’ und ‘Lesbarkeit’ um, dass die entsprechenden Ampeln von rot auf grün wechselten. Oder zumindest auf gelb. Alles in allem eine sehr zeitaufwendige Arbeit.</p>



<p>Trotzdem fehlte damit noch die innere Verknüpfung. So schrieb ich für jedes Themencluster eine Zusammenfassung und verlinkte deren Wörter mit den verwandten Beiträgen und Seiten. Und da ich diese Zusammenfassungen in Zukunft absehbar häufiger würde aktualisieren müssen, erleichterte ich mir diese Tipparbeit, indem ich je Zusammenfassungen als ShortCodes implementierte. Jetzt reichte eine einfache Zeichenkette am Ende eines jedes Beitrags und er wäre intern passend verlinkt.</p>


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



<p>Den wirklichen Durchbruch in Sachen Indexierung erlebte ich aber erst, als ich jeden Post und jede Seite einzeln und händisch in der Google-Search-Konsole zur Indexierung angemeldet hatte — was auch hieß, jedes Mal zeitaufwendig die Indexierbarkeit überprüfen zu lassen. Heute hat Google von meinen 74 Artikeln und 18 Seiten meiner deutschen Site 84 indexiert. Und was nicht indexiert ist, muss — aus Leserinnensicht — nicht über Google gefunden werden. Wie z.B. meine Datenschutzseite oder der Bildernacheweis. Auf meiner englischen Site sieht es sogar noch besser aus: von den 53 Post und 15 Seiten sind 114 indexiert — was nur besagt, dass auch noch veraltete Links im Index enthalten sind. Diesmal bin ich den diesbzgl. Empfehlungen der Lehrbücher aber gleich gefolgt und habe die entsprechenden Weiterleitungen((pars pro toto: vgl. Eisenmenger, Richard u. Florian Brinkmann: WordPress 6. Das umfassende Handbuch, 2. Aufl., Bonn 2022, S. 517)) aktiviert — hier mit dem Plugin ‘<a href="https://wordpress.org/plugins/quick-301-redirects/">Quick 301 Redirects</a>’.</p>



<p>Was war nun die entscheidende Maßnahme für den Erfolg? Ich fürchte, es braucht alle. Auch wenn ich dafür meinen Schreibstil ändern musste. Vor allem bei der Umsetzung der YoastSEO-Empfehlungen. Aber dazu später mehr. So bald Google diese Artikel indexiert hat. Immer das Wichtigste zuerst.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit unserer <a href="http://127.0.0.1/wpd.kr/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun: Muss eine Web-Designerin ihr bisheriges 
  <a href="http://127.0.0.1/wpd.kr/yaml-css/">WordPress-Theme aufgeben</a>, braucht sie Ersatz. Ein freies 
  <a href="https://github.com/bootscore">Theme von der Stange</a> wird sie 
  <a href="http://127.0.0.1/wpd.kr/bootscore-pimpen/">personalisieren</a> wollen. Zuerst 
  <a href="http://127.0.0.1/wpd.kr/bootscore-font-awesome-shortcode/">etwas</a> 
  <a href="http://127.0.0.1/wpd.kr/font-awesome-checklist/">kosmetisch</a>, dann in Sachen 
  <a href="http://127.0.0.1/wpd.kr/silbentrennung/">Grauwert</a>, 
  <a href="http://127.0.0.1/wpd.kr/mehrsprachigkeit/">Mehrsprachigkeit</a> und innerer
  <a href="http://127.0.0.1/wpd.kr/fussnoten/">Verweistechnik</a> und 
  <a href="http://127.0.0.1/wpd.kr/innere-verlinkung/">Verlinkung</a>. Schließlich wird sie besondere 
  <a href="http://127.0.0.1/wpd.kr/nachrangiger-footer-kram/">Footer</a> aktivieren, ein 
  <a href="http://127.0.0.1/wpd.kr/sekundaer-menue/">Zweitmenü</a> oder einen 
  <a href="http://127.0.0.1/wpd.kr/copyright-line/">Copyright-Hinweis</a>, bevor sie die 
  ‘<a href="http://127.0.0.1/wpd.kr/bootscore-plus-seo/">SEO-zität</a>’ 
  <a href="http://127.0.0.1/wpd.kr/keine-toten-links-bitte/">überprüft</a>. 
  Diesen Weg unterstützt auch dieser Post.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>



<p></p>
<p>The post <a href="https://karsten-reincke.de/innere-verlinkung/">Innere Verlinkung — ein Reset</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/innere-verlinkung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lizenzkonformes Javascript</title>
		<link>https://karsten-reincke.de/lizenzkonformes-javascript/</link>
					<comments>https://karsten-reincke.de/lizenzkonformes-javascript/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 17 May 2023 07:27:52 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=7247</guid>

					<description><![CDATA[<p>Um die Übertragung im Netz zu beschleunigen, betten Web-Sites JavaScript-Bibliotheken üblicherweise ‘minified’ ein, in komprimierter Form also. Leerzeichen, Zeilenvorschübe und Kommentare sind daraus entfernt worden. Daher enthalten die Bibliotheken nur noch rudimentäre Lizenzinformationen — jedenfalls nicht den Lizenztext selbst. Aber alle FOSS-Lizenzen verlangen von uns, dass wir einige Compliance-Artefakte mit dem Code zusammen ausliefern — [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Lizenzkonformes Javascript</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Um die Übertragung im Netz zu beschleunigen, betten Web-Sites JavaScript-Bibliotheken üblicherweise ‘<a href="https://kinsta.com/blog/minify-javascript/">minified</a>’ ein, in komprimierter Form also. Leerzeichen, Zeilenvorschübe und Kommentare sind daraus  entfernt worden. Daher enthalten die Bibliotheken nur noch rudimentäre Lizenzinformationen — jedenfalls nicht den Lizenztext selbst. Aber alle FOSS-Lizenzen verlangen von uns, dass wir einige Compliance-Artefakte mit dem Code zusammen ausliefern — insbesondere den Lizenztext. Lizenzkonformes Javascript ist mithin eine Herausforderung für Sites — in und mit <em>bootScore</em>, <em>WordPress</em> und anderswo.<span id="more-7247"></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">[ de | <a href="http://127.0.0.1/wpd.fd/license-compliant-javascript">en</a> ]</div></div></div></div>



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



<ul class="wp-block-list">
<li>Verwende die JavaScript-Bibliothek <em>Bootstrap</em> so, wie sie von <em>bootScore</em> bereitgestellt wird</li>



<li>Verwende die JavaScript-Bibliotheken so, wie sie von <em>WordPress</em> geliefert werden</li>



<li>Erstelle eine Tabelle mit den Informationen zur JavaScript-Konformität</li>



<li>Erstelle für jede von <em>bootScore</em> oder <em>WordPress</em> gelieferte JavaScript-Bibliothek eine entsprechende Zeile in der JS-Tabelle.</li>



<li>Binde diese Tabelle in Deine <em>Open Source Compliance Page</em> ein.</li>



<li>Mache die <em>Open Source Compliance Page</em> über den ‘Footer’ Deiner Seiten zugänglich</li>
</ul>



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



<p><a href="https://github.com/bootscore/bootscore">bootSCore</a> enthält einige JS-Komponenten. Zum Beispiel seine eigenen entfalteten JavaScript-Bibliotheken((vgl. <code>./bootscore/js/theme.js</code>)) — implizit lizenziert unter der MIT, aber ohne explizites Lizenzierungsstatement — und die minifizierte Bootstrap JavaScript-Bibliothek((vgl. <code>./bootscore/js/lib/bootstrap.bundle.min.js</code>)) — durch ein entsprechendes Lizenzierungsstatement explizit unter der MIT-Lizenz gestellt. Aber keine davon enthält den Lizenztext selbst. Auch WordPress bringt einige eigene und einige minimierte JavaScript-Bibliotheken von Drittanbietern mit((vgl. <a href="https://codex.wordpress.org/Javascript_Reference">https://codex.wordpress.org/Javascript_Reference</a> bzw. <code>./wp-includes/js</code>)), wie z.B. die jQuery-Bibliothek<sup><a href="https://karsten-reincke.de/lizenzkonformes-javascript/#footnote_1_7247" id="identifier_1_7247" class="footnote-link footnote-identifier-link" title="vgl. wp-includes/js/jquery/">1</a></sup>, die ebenfalls unter der MIT lizenziert ist und ein entsprechendes Lizenzstatement enthält, aber nicht den Lizenztext. Unabhängig davon, von wem die Website-Besitzerin diese Bibliotheken erhalten hat — von <em>bootScore</em> oder <em>WordPress</em> -, ist sie es letztendlich, die die Lizenzanforderungen erfüllen muss. Denn es ist ja ihr System ist, das die JavaScript-Bibliotheken an ihre Leser weitergibt.</p>



<p>Aber worin besteht denn nun eigentlich die Herausforderung?</p>


<div class="wp-block-image"><figure class="alignright size-medium is-resized is-style-default "><a href="https://karsten-reincke.de/wp-content/uploads/2023/05/js.jpg" data-fancybox><img decoding="async" src="https://karsten-reincke.de/wp-content/uploads/2023/05/js-300x300.jpg" alt="JS Logo" width="120"></a></figure></div>



<p>Wie die JavaScript-Bibliotheken von <em>Bootstrap</em> und <em>jQuery</em> auch, sind die meisten JS-Bibliotheken MIT lizenziert. Diese FOSS-Lizenz verlangt, dass beides — die Copyright-Zeile und der Lizenztext — zusammen mit dem Open-Source-Programm verteilt wird. <em>“The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.”</em>((cf. <a href="https://opensource.org/license/mit/">MIT License</a>))</p>



<p>Für (L|A)GPL-lizenzierte JavaScript-Bibliotheken gilt fast dasselbe: Diese Lizenzen erlauben die Weitergabe des Quellcodes, <em>“[…] provided that one conspicuously and appropriately publishes on each copy an appropriate copyright notice and disclaimer of warranty […] and gives any other recipients of the Program a copy of this License along with the Program”</em>.((pars pro toto vgl. <a href="https://opensource.org/license/gpl-2-0/">GPL‑2.0</a>. Zusätzlich verlangt die (A)GPL, dass jeder Code, der die (A)GPL-lizenzierte Bibliothek usw. verwendet, ebenfalls unter der (A)GPL lizenziert ist (Copyleft-Effekt). Aber darum geht es in diesem Zusammenhang nicht.))</p>



<p>Wir haben hier also einen Widerspruch: Auf der einen Seite lädt ein Browser nicht nur den Seitentext (HTML) herunter, sondern auch die JavaScript-Bibliothek. Dieser Download verbreitet den Code und löst damit die Notwendigkeit aus, die Anforderungen der Open-Source-Lizenz zu erfüllen. Auf der anderen Seite enthalten die komprimierten Bibliotheken — selbst wenn sie als Paket von den Autorinnen angeboten werden — in der Regel nicht mehr die notwendigen Lizenzinformationen. Denn je kleiner die Bibliotheken sind, desto schneller erscheinen die Seiten auf den Rechnern der Leser angezeigt.</p>



<p>Der Website-Betreiberin bieten sich zwei Möglichkeiten, mit dieser Herausforderung umzugehen: Entweder sie heilt die implizit von WordPress und <em>bootScore</em> übernommenen Pakete nachträglich (und (halb)manuell). Oder sie verwendet sie so, wie sie sie bekommen hat. Es ist klar: Heilen würde bedeuten, dass wir diese Aufgabe jedes Mal wiederholen müssten, wenn wir <em>WordPress</em> oder <em>bootScore</em> aktualisieren. Also wäre der andere Weg weniger aufwendig. Also besser — sofern es eine Option gäbe, die Idee und die Anforderungen freier Softwarelizenzen dabei (doch) nicht zu verletzen.</p>



<p>Die Lösung ist dies:</p>



<p>Geben Entwickler ihre JavaScript-Bibliotheken als ‘minified’ Versionen weiter, gehen sie davon aus, dass ihre JS-Bibliothek auch in dieser Version verwendet wird. Daraus schließen wir, dass die Copyright-Owner diese Art der Nutzung implizit (konkludent) zulassen. Auch, wenn die Bibliotheken dabei gegen die von den Entwicklern selbst gewählte Lizenz verstößt. Trotzdem sollten wir unseren Benutzern eine andere Möglichkeit anbieten, diese Informationen zu erhalten. Wir zeigen damit, dass wir die FOSS-Idee verstanden haben und respektieren. Außerdem müssen wir darauf achten, nur die minifizierten JavaScript-Bibliotheken in unsere Site einzubinden. Also nur die Form, die die Entwicklerin selbst zur Verfügung gestellt hat. Sonst unterliefen wir ja unsere Argumentation. Im Falle der <em>Bootstrap</em>-JS-Lib in <em>bootScore</em> und der <em>jQuery</em>-JS-Lib etc. in <em>WordPress</em> dürfen wir davon ausgehen, dass sie dies getan haben.</p>



<p>Wir haben so im Falle eines Rechtsstreits um die Lizenzerfüllung bei JS-Bibliotheken((Ich habe noch nie von solch einem Disput gehört!)) ein starkes Argument für die Legalität unseres Vorgehens. Und wir befinden uns in sehr guter Gesellschaft: Die Sekundärliteratur diskutiert es in diesem Sinne((vgl. <a href="https://www.iusmentis.com/computerprograms/opensourcesoftware/license-notices-web-applications/">https://www.iusmentis.com/computerprograms/opensourcesoftware/license-notices-web-applications/</a>)) und sogar die FSF schlägt vor, so vorzugehen.((vgl. <a href="https://www.gnu.org/licenses/javascript-labels.en.html">https://www.gnu.org/licenses/javascript-labels.en.html</a>  und <a href="https://www.gnu.org/licenses/javascript-labels-rationale.html">https://www.gnu.org/licenses/javascript-labels-rationale.html</a>)) Und die hat nun wirklich nicht den Ruf, die Einhaltung von Lizenzen auf die leichte Schulter zu nehmen.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang …</h5>
  <p class="myPageContext">… steht das mit einer systematischen <i class="fa-brands fa-osi"></i> Erfüllung
  von <i class="fa-brands fa-linux"></i> FOSS-Lizenzen? Nun, dazu müssen wir halt auch 
  <a href="http://127.0.0.1/wpd.kr/open-source-diversity/">politische Konnotationen</a> bedenken, 
  <a href="http://127.0.0.1/wpd.kr/unechte-open-source-software/">konzeptionelle</a> und 
  <a href="http://127.0.0.1/wpd.kr/die-sache-mit-der-milch/">kontextuelle</a> Aspekte analysieren — 
  <a href="http://127.0.0.1/wpd.kr/jniz/">einzeln</a> oder <a href="http://127.0.0.1/wpd.kr/foss-con-korea-2013/">gemeinsam 
  auf Konferenzen</a>. Wir müssen <a href="http://127.0.0.1/wpd.kr/yocto-iot-gplv3/">konkrete Fälle</a> und allgemeine 
  <a href="http://127.0.0.1/wpd.kr/lilypond-gpl/">Nebenwirkungen</a> durchdenken, für 
  <a href="http://127.0.0.1/wpd.kr/lizenzkonformes-javascript/">Software</a>, 
  <a href="http://127.0.0.1/wpd.kr/bilder-datenbanken/">Bilder</a> oder Dokumente. Wir müssen 
  <a href="http://127.0.0.1/wpd.kr/cc-by-trolls/">Trends</a> benennen und <a href="http://127.0.0.1/wpd.kr/bosl-3-0/">Leitfäden</a> erstellen. 
  Vornehmlich aber müssen wir die <a href="http://127.0.0.1/wpd.kr/tdosca/">Automatisierung der Lizenzerfüllung</a> 
  vorantreiben, unser <a href="http://127.0.0.1/wpd.kr/oslic/">Lizenzwissen frei zur Verfügung stellen</a>,  
  es in <a href="http://127.0.0.1/wpd.kr/oscad/">kleinere Tools</a> gießen und in <a href="http://127.0.0.1/wpd.kr/oscake/">
  größere Systeme</a> einbringen: Denn FOSS lebt von der Freiheit durch Lizenzerfüllung, im Großen und im Kleinen.</p>
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>
<ol class="footnotes"><li id="footnote_1_7247" class="footnote">vgl. <code>wp-includes/js/jquery/</code></li></ol><p>The post <a href="https://karsten-reincke.de/lizenzkonformes-javascript/">Lizenzkonformes Javascript</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/lizenzkonformes-javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>bootScore pimpen</title>
		<link>https://karsten-reincke.de/bootscore-pimpen/</link>
					<comments>https://karsten-reincke.de/bootscore-pimpen/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Sat, 22 Apr 2023 22:29:56 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=4866</guid>

					<description><![CDATA[<p>bootScore verbindet Bootstrap und WordPress — als Theme mit ‘responsivem Design’. Dies bringt mit, was die Web-Designerin oft nicht selbst programmieren will. Jetzt kann sie stattdessen auf eine MIT lizenzierte Vorarbeit zurückgreifen, gehostet auf GitHub. Deren ‘Standard-Outfit’ personalisiert sie dann, — als Web-Designerin. Adaptiert werde das Theme — so bootScore -, indem frau dessen “[…] [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/bootscore-pimpen/">bootScore pimpen</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em><a href="https://bootscore.me/">bootScore</a></em> verbindet <em><a href="https://getbootstrap.com/">Bootstrap</a></em> und <em><a href="https://de.wordpress.org/">WordPress</a></em> — als Theme mit ‘responsivem Design’. Dies bringt mit, was die Web-Designerin oft nicht selbst programmieren will. Jetzt kann sie stattdessen auf eine MIT lizenzierte Vorarbeit zurückgreifen, <a href="https://github.com/bootscore/bootscore">gehostet auf GitHub</a>. Deren ‘Standard-Outfit’ personalisiert sie dann, — als Web-Designerin. Adaptiert werde das Theme — so <em>bootScore</em> -, indem frau dessen “[…] .scss, .php and .js Dateien angepasse”. Hier meine 13 Schritte vom puren <em>bootScore</em> hin zur neuen ‘Homepage’:<span id="more-4866"></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">[ de | <a href="http://127.0.0.1/wpd.fd/pimp-your-bootscore">en</a> ]</div></div></div></div>



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



<p>Als Ausgangspunkt hatte ich (bereits) WordPress installiert<sup><a href="https://karsten-reincke.de/bootscore-pimpen/#footnote_1_4866" id="identifier_1_4866" class="footnote-link footnote-identifier-link" title="Anleitung dazu gibt es zu Hauf, auch eine von WordPress selbst.">1</a></sup>, (Test-) Daten eingegeben<sup><a href="https://karsten-reincke.de/bootscore-pimpen/#footnote_2_4866" id="identifier_2_4866" class="footnote-link footnote-identifier-link" title="z.B. mit denen der zu migrierenden Site oder des Theme Unit Tests">2</a></sup>, <em>bootScore</em> installiert und es als Theme aktiviert<sup><a href="https://karsten-reincke.de/bootscore-pimpen/#footnote_3_4866" id="identifier_3_4866" class="footnote-link footnote-identifier-link" title="z.B. gemäß bootScore-Anleitung">3</a></sup>. So entstand — als <i class=" fa-solid fa-list"></i> Reihe von <strong><em>pimp your bootScore</em></strong> posts — folgender Weg: </p>



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



<p></p>



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



<ol class="wp-block-list">
<li>Font Awesome — ein Symbol sagt mehr als 100 Worte: <a href="https://karsten-reincke.de/bootscore-font-awesome-shortcode/">ShortCodes</a> und <a href="https://karsten-reincke.de/font-awesome-checklist/">CSS-Klassen</a></li>



<li>SEO von Anfang an: <a href="https://karsten-reincke.de/bootscore-plus-seo/">HTML-Semantik, Schlagwörter und Sitemaps</a> und <a href="https://karsten-reincke.de/seo-b/">keine toten Links, bitte!</a></li>



<li>Das ‘(Un)Wichtige’ nach unten: Der dezente und umfassende Footer-Bereich für den ’nachrangigen’ <a href="https://karsten-reincke.de/nachrangiger-footer-kram/">Legalkram</a>, das nachrangige <a href="https://karsten-reincke.de/sekundaer-menue/">Zweitmenü</a> und die eigene <a href="https://karsten-reincke.de/copyright-line/">Copyrightline</a></li>



<li>Mehrsprachigkeit mitdenken: <a href="https://karsten-reincke.de/bilingual/">Bilingualität ohne WP-Globus</a></li>



<li>Die Übersichtlichkeit: Das <a href="https://karsten-reincke.de/tiefer-verschachtelte-menues/">tiefer verzweigte Menü </a>mit <a href="https://karsten-reincke.de/shortcodes-im-menue/">integrierten Shortcodes</a>, <a href="https://karsten-reincke.de/saubere-menues/">sauberen Ebenen</a> und <a href="https://karsten-reincke.de/menue-stapel/">lesbarer Stapelung</a>, das dennoch kein <a href="https://karsten-reincke.de/keine-hover-menues/">H‑OVER-Menü</a> sein muss.</li>



<li>Nicht frickeln, sondern automatisieren: Die <a href="https://karsten-reincke.de/silbentrennung/">eingebaute Silbentrennung</a></li>



<li>Ein Bild sagt mehr als 1000 Worte:
<ul class="wp-block-list">
<li>Das kann ein ‘manuell’ mit einer <a href="https://karsten-reincke.de/fancy-boxes/">fancy Box</a> in den Text eingefügtes Bild sein — gerne auch beschleunigt ausgeliefert <a href="https://karsten-reincke.de/bilder-beschleunigen/">per WordPress vorberechneter Bildgröße</a> oder als <a href="https://karsten-reincke.de/fancy-svgs/">SVG</a>.</li>



<li>Oder ein automatisiert verwaltetes ‘<a href="https://karsten-reincke.de/verwischte-primaere-beitragsbilder/">Primäres Beitragsbild</a>’. Nur sollte es möglichst <a href="https://karsten-reincke.de/weniger-verwischte-bilder/">wenig verwischt </a>sein, wenn es des Responsiv-Designs wegen angepasst wird. Das organisiert <a href="https://karsten-reincke.de/ganz-ohne-verwischte-bilder/">das moderne IMG-Tag mit den Source-Angaben</a> wohl am Besten. Schneller umzusetzen, aber weniger effektiv wäre es, WordPress <a href="https://karsten-reincke.de/groessere-bild-quadrate/">eine weitere Bildgröße</a> im Voraus berechnen zu lassen.</li>



<li>Wirklich <a href="https://karsten-reincke.de/bilder-datenbanken/">freie Bilder </a>gibt es im Netz, wenn wir ein <a href="https://karsten-reincke.de/bilderverzeichnis/">Bildverzeichnis</a> vorsehen, um die Lizenzvorgabn zu erfüllen.</li>



<li>Und die kleinen Browserbildchen neben der Url? Oder das Logo? Dafür nutzen wir<a href="https://karsten-reincke.de/logos-und-favicons/"> <em>bootScoores</em> Logo- und Favicon-System</a>.</li>
</ul>
</li>



<li>Das Finden erleichtern: <a href="https://karsten-reincke.de/zwei-auf-einen-streich/">TAG-Wolken und Beitragslisten</a> in der Sidebar</li>



<li>Der ‘gemauerte’ Überblick: <a href="https://karsten-reincke.de/masonry-ueberblick/">Die Masonry-Beitragsliste</a></li>



<li>Das Wichtigste zuerst: <a href="https://karsten-reincke.de/eine-eigene-landingpage/">eine eigene Landing-Page</a> — <a href="https://karsten-reincke.de/verschlankte-landingpage/">selbst gestaltet -</a> und dann <a href="https://karsten-reincke.de/weg-was-stoert/">weg mit dem, was ablenkt</a>, auch mittels <a href="https://karsten-reincke.de/kontext-sensitive-sidebars/">kontextsensitiven Sidebars</a> und <a href="https://karsten-reincke.de/dezente-post-verlinkung/">dezenterem Hinweise auf jüngere Posts</a></li>



<li>Designte Lesbarkeit: <em>bootScore</em> und <a href="https://karsten-reincke.de/passende-web-fonts/">der eigene generelle Font</a> und <a href="https://karsten-reincke.de/fonts-fuer-besondere-anlaesse/">ein Font für besondere Anlässe</a></li>



<li>Recht muss Recht bleiben: <a href="https://karsten-reincke.de/datenschutz-dsgvo/">Datenschutz, DSGVO und Cookies</a>, der <a href="https://karsten-reincke.de/saubere-cookie-nutzung/">Cookie-Dialog</a> und <a href="https://karsten-reincke.de/sauberes-cookie-management/">seine Semantik </a>mit bootScore</li>



<li>Der erste Eindruck: <a href="https://karsten-reincke.de/farbkonzept/">das Nutzerinnen orientierte Farbkonzept</a></li>
</ol>



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



<p>So entsteht eine bootScore-basierte Website mit Responsive Design, die den Weg dorthin in sich selbst dokumentiert, auf dass ich auch in Zukunft nachschlagen kann, wie ich es in der Vergangenheit gemacht habe. Wenn dies auch anderen nützt, wäre das ein willkommener Nebeneffekt.</p>



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



<p class="has-text-align-right">Im Übrigen: <i class=" fa-solid fa-venus-mars"></i> <a href="https://karsten-reincke.de/maenner-sind-mitgemeint/">Männer</a> sind <a href="https://karsten-reincke.de/genderismus/">mitgemeint</a>.</p>
<ol class="footnotes"><li id="footnote_1_4866" class="footnote">Anleitung dazu gibt es zu Hauf, auch <a href="https://developer.wordpress.org/advanced-administration/before-install/howto-install/">eine von WordPress selbst</a>.</li><li id="footnote_2_4866" class="footnote">z.B. mit denen der zu migrierenden Site oder des <a href="https://codex.wordpress.org/Theme_Unit_Test">Theme Unit Tests</a></li><li id="footnote_3_4866" class="footnote">z.B. gemäß <em><a href="https://bootscore.me/documentation/installation/">bootScore-Anleitung</a></em></li></ol><p>The post <a href="https://karsten-reincke.de/bootscore-pimpen/">bootScore pimpen</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/bootscore-pimpen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Datenschutz, DSGVO und Cookies</title>
		<link>https://karsten-reincke.de/datenschutz-dsgvo/</link>
					<comments>https://karsten-reincke.de/datenschutz-dsgvo/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Fri, 21 Apr 2023 09:17:38 +0000</pubDate>
				<category><![CDATA[Lizenzkonformität]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=6392</guid>

					<description><![CDATA[<p>Datenschutz sei komplex und müsse von Expertinnen organisiert werden, wird der WEB-Site-Betreiberin gerne bedeutet. Was aber, wenn sie das Geld dafür nicht hat? Wenn es irgendwie unsinnig erscheint, mit der Kanone eines bezahlten Expertinnenteams auf einen Spatzenblog zu schießen? Dann wird sie sich vielleicht via Google irgendein gerne genutztes WordPress-Plugin für Datenschutz und/oder Cookies organisieren [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/datenschutz-dsgvo/">Datenschutz, DSGVO und Cookies</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://karsten-reincke.de/datenschutz/">Datenschutz</a> sei komplex und müsse von Expertinnen organisiert werden, wird der WEB-Site-Betreiberin gerne bedeutet. Was aber, wenn sie das Geld dafür nicht hat? Wenn es irgendwie unsinnig erscheint, mit der Kanone eines bezahlten Expertinnenteams auf einen Spatzenblog zu schießen? Dann wird sie sich vielleicht via Google irgendein gerne genutztes WordPress-Plugin für Datenschutz und/oder Cookies organisieren — und hoffen, dass alles gut geht. Oder sie wird dem genauer nachgehen. Und sich am Ende vielleicht auch Daumenregeln für das Thema ‘Datenschutz und DSGVO’ zusammenstellen, aus und mit denen sich wenigstens ein gut gangbarer Weg ergibt. Hier meine 3.7 Faustregeln:<span id="more-6392"></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">[ de | <a href="http://127.0.0.1/wpd.fd/privacy-dsgvo">en</a> ]</div></div></div></div>



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



<ul class="wp-block-list">
<li>I. Verwende nur die personenbezogenen Daten, die Du für das Funktionieren Deines Systems wirklich benötigst.</li>



<li>II. Wenn Du personenbezogene Daten erhebst, dann sage den Besitzerinnen,
<ul class="wp-block-list">
<li>dass Du das tust,</li>



<li>zu welchem Zweck Du die Daten verwendest,</li>



<li>welche Rechtsgrundlage Dich dazu berechtigt,</li>



<li>an wen Du die Daten weitergibst,</li>



<li>wie lange Du sie bei Dir speicherst,</li>



<li>wie sie bei der erfragen können, welche Daten Du über die Zeit gespeichert hast</li>



<li>wie sie die Daten wieder löschen lassen können.</li>
</ul>
</li>



<li>III. Wenn Du Daten auf dem Rechner Deiner Nutzerinnen speicherst, die sie nicht direkt oder indirekt angefordert haben (könnten), frage sie vorher um Erlaubnis.</li>
</ul>



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



<p>Gehe ich danach vor — so mache ich immer wieder glauben — werde ich meine Sites so gestalten, dass ich die gröbsten Fallen<sup><a href="https://karsten-reincke.de/datenschutz-dsgvo/#footnote_1_6392" id="identifier_1_6392" class="footnote-link footnote-identifier-link" title="vgl. https://www.e-recht24.de/artikel/datenschutz/8451-hinweispflicht-fuer-cookies.html">1</a></sup> und Fehler<sup><a href="https://karsten-reincke.de/datenschutz-dsgvo/#footnote_2_6392" id="identifier_2_6392" class="footnote-link footnote-identifier-link" title="vgl. https://www.ihk.de/halle/recht/datenschutz/sonstige-rechtsinformationen/cookie-banner-fuenf-fehler-die-sie-vermeiden-sollten--4854218">2</a></sup> vermeide. Denn eines habe ich immer im Kopf: mit einem bloßen Cookie-Banner ist es nicht getan:</p>



<ol class="wp-block-list">
<li>Als Erstes überlege ich mir, wo mein Blog als System personenbezogene Daten erhebt. Die, die ich in und mit Formularen explizit abfrage, fallen mir am leichtesten auf und ein. Bei denen weiß ich — ‘qua Amt’ -, wofür ich sie nutze und an wen ich sie weitergebe etc.</li>



<li>Außerdem ist mir klar, dass auch IP-Adressen als personenbezogenen Daten gelten — obwohl das Internet ohne sie gar nicht funktionieren würde.</li>



<li>Zudem können WordPress, die von mir aktivierten Plugins, Javascript-Bibliotheken, Google-Fonts u.Ä.m.  Daten erheben, notieren und an Dritte versenden.</li>



<li>Schließlich werden meine Kommentatorinnen üblicherweise über das gängige Gravatar-System wiedererkennbar gemacht.</li>
</ol>



<p>Dieses Gemenge muss ich ordnen:</p>



<ul class="wp-block-list">
<li>Regel (I) sagt mir, dass Weniger im Mehr ist: Je weniger Daten ich erfrage, je weniger Plugins ich verwende, desto schlanker wird mein Datenschutzkonzept. Also miste ich hier aus, z.B., in dem ich Produktiv- und Developsytsem unterschiedlich behandele.</li>



<li>Regel (II) sagt mir, dass ich die verbleibenden Datensets aber auch tatsächlich im Datenschutzkonzept beschreiben muss. Also ermittle ich nach bestem Wissen und Gewissen, welche Daten meine Plugins, Font-Requests und andere technische Komponenten erheben, wie sie sie speichern und wohin sie sie weitergeben.</li>



<li>Regel (III) sagt mir, dass ich es ich es mir erlauben lassen muss, Dateien, will sagen: Cookies auf den Rechner meiner Nutzerin schreiben zu dürfen, sei es — wie bei technisch notwendigen Cookies — gesetzlich, sei es — wie bei den anderen — per Zustimmung durch meiner Nutzerin. Und um die gewährt zu bekommen, ist es hilfreich, Zweck und Auswirkung anzugeben.</li>
</ul>



<p>Weitere Posts beschreiben, wie ich das konkret umgesetzt habe.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang … </h5>
  <p class="myPageContext">… steht das mit unserer <a href="http://127.0.0.1/wpd.kr/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun, zuletzt muss die Web-Designerin 
  <a href="http://127.0.0.1/wpd.kr/bootscore-pimpen/">im Rahmen ihrer Anpassungen</a> auch 
  rechtliche Vorgaben beachten, seien es die der
  <a href="http://127.0.0.1/wpd.kr/datenschutz-dsgvo/">DSGVO</a>, die für eine
  <a href="http://127.0.0.1/wpd.kr/saubere-cookie-nutzung/">Cookie-Zustimmung</a> und deren
  <a href="http://127.0.0.1/wpd.kr/sauberes-cookie-management/">Beachtung</a> oder die zur 
  <a href="http://127.0.0.1/wpd.kr//">Erstellungen</a> einer
  <a href="http://127.0.0.1/wpd.kr/datenschutz/">Datenschutzerklärung</a>.
  In diesen Kontext gehören dann auch die Fragen nach dem 
  <a href="http://127.0.0.1/wpd.kr/bilderverzeichnis/">Zweck</a> eines 
  <a href="http://127.0.0.1/wpd.kr/bildnachweise/">Bildverzeichnisses</a>, nach einem
  <a href="http://127.0.0.1/wpd.kr/impressum/">adäquaten Impressum</a> oder nach einer hinreichenden
  <a href="http://127.0.0.1/wpd.kr/license-compliance/">Open-Source-Lizenzerfüllung</a>.
  Dies ins rechte Licht zu rücken, will auch dieser Post unterstützen.</p> 
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>
<ol class="footnotes"><li id="footnote_1_6392" class="footnote">vgl. <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_2_6392" class="footnote">vgl. <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://karsten-reincke.de/datenschutz-dsgvo/">Datenschutz, DSGVO und Cookies</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/datenschutz-dsgvo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fonts für besondere Anlässe</title>
		<link>https://karsten-reincke.de/fonts-fuer-besondere-anlaesse/</link>
					<comments>https://karsten-reincke.de/fonts-fuer-besondere-anlaesse/#respond</comments>
		
		<dc:creator><![CDATA[Karsten Reincke]]></dc:creator>
		<pubDate>Wed, 19 Apr 2023 08:52:06 +0000</pubDate>
				<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bootScore]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://127.0.0.1/wpd.kr/?p=6377</guid>

					<description><![CDATA[<p>Bootstrap* und bootScore verwenden SCSS-Variablen — wie wir wissen. Um Schriften zu gruppieren, bietet die Datei bootstrap/_variables.scss die Variablen $font-family-base, $font-family-sans-serif, $font-family-monospace und $font-family-code. Eine Variable $font-family-serif existiert nicht. Überschreiben wir family-base in unserer Datei _bscore_variables.scss, legen wir den Default neu fest. Wollen wir für unsere Überschriften einen abweichenden Font verwenden, müssen wir die Variablen [&#8230;]</p>
<p>The post <a href="https://karsten-reincke.de/fonts-fuer-besondere-anlaesse/">Fonts für besondere Anlässe</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Bootstrap* und <em>bootScore</em> verwenden SCSS-Variablen — <a href="https://karsten-reincke.de/passende-web-fonts/">wie wir wissen</a>. Um Schriften zu gruppieren, bietet die Datei <code>bootstrap/_variables.scss</code> die Variablen <code>$font-family-base</code>, <code>$font-family-sans-serif</code>, <code>$font-family-monospace</code> und <code>$font-family-code</code>. Eine Variable <code>$font-family-serif</code> existiert nicht. Überschreiben wir <em>family-base</em> in unserer Datei <code>_bscore_variables.scss</code>, legen wir den Default neu fest. Wollen wir für unsere Überschriften einen abweichenden Font verwenden, müssen wir die Variablen <code>$headings-font-family</code> und <code>$display-font-family</code> umdefinieren. <a href="https://bootscore.me/documentation/google-fonts/">Das reicht aus, wenn wir <em>nur zwei Schriftfamilien</em> benutzen wollen</a>. Möchten wir hingegen auch andere Fonts für besondere Anlässe verwenden, z.B. einen dritten Font für unsere Menüs, dann müssen wir anders aktiv werden:<span id="more-6377"></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">[ de | <a href="http://127.0.0.1/wpd.fd/fonts-for-special-occasions">en</a> ]</div></div></div></div>



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



<ul class="wp-block-list">
<li>Definiere in Deiner Child-Theme-Datei <code>scss/_bscore_variables.scs</code> noch die Variable <code>$menu-font-family: 'PT Sans', sans-serif, !default;</code> (mit einem Menufont Deiner Wahl.)</li>



<li>Trage in Deiner Child-Theme-Datei <code>scss/_bsscore-custom.scs</code> die folgenden Zeilen ein:</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>Weise über das WP-Backend den Widgets <code>Footer 1</code> bis <code>Footer 4</code>, die eine Liste als Menü enthalten, mit <code>&lt;ul class="footerSubMenu"&gt;</code> die neue Klasse zu.</li>
</ul>



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



<p>Noch einmal kurz: Wie kann dieser Bedarf eigentlich entstehen?</p>



<p>Menüs sehen in der Regel mit serifenlosen Fonts besser aus. Haben wir in der Variable <code>$font-family-base</code> eh einen serifenlosen Default-Font festgelegt, ist alles gut. Verwenden wir aber einen Serifenfont, müssen wir — wenn wir es denn so wollen — nicht nur den Überschriften einen serifenlosen Font zuweisen, sondern auch die Menüs. Das Hauptmenu ist seitens <em>bootScore</em> in einem Bereich mit der ID <code>bootscore-navbar</code> eingebettet. Diese ID können wir weiterverwenden. Für die Submenüs im Footerbereich müssen wir uns eine entsprechende Klasse definieren und den Listen manuell zuweisen.</p>


<hr class="wp-block-separator has-alpha-channel-opacity">
<h5 class="wp-block-heading"><i class="fa-solid fa-link"></i> Und in welchem Zusammenhang … </h5>
  <p class="myPageContext">… steht das mit unserer <a href="http://127.0.0.1/wpd.kr/bootscore-migration/">Migration</a> 
  zu <a href="https://bootscore.me/">bootScore</a>? Nun, hat Web-Designerin 
  <a href="http://127.0.0.1/wpd.kr/bootscore-pimpen/">im Rahmen ihrer Anpassungen</a> die Frage einer 
  <a href="http://127.0.0.1/wpd.kr/ganz-ohne-verwischte-bilder/">guten Bebilderung</a> beantwortet, kann sie entspannt 
  <a href="http://127.0.0.1/wpd.kr/zwei-auf-einen-streich/">Tags und Wolken</a> in ihre Site einbinden, ihre 
  <a href="http://127.0.0.1/wpd.kr/masonry-ueberblick/">Überblicksseite</a> 
  <a href="http://127.0.0.1/wpd.kr/masonry-mit-drei-spalten/">verbessern</a> und 
  <a href="http://127.0.0.1/wpd.kr/eine-eigene-landingpage/">eine eigene Landingpage</a> gestalten. 
  Ob die entstandene <a href="http://127.0.0.1/wpd.kr/weg-was-stoert/">Fülle</a> der eigenen Leserin wirklich 
  nutzt, ob es nicht <a href="http://127.0.0.1/wpd.kr/kontext-sensitive-sidebars/">schlanker</a> geht und 
  <a href="http://127.0.0.1/wpd.kr/verschlankte-landingpage/">wie</a>, ob 
  <a href="http://127.0.0.1/wpd.kr/dezente-post-verlinkung/">dezentere Verweise</a> und 
  <a href="http://127.0.0.1/wpd.kr/passende-web-fonts/">spezielle Fonts</a> auch 
  <a href="http://127.0.0.1/wpd.kr/fonts-fuer-besondere-anlaesse/">für besondere Anlässe</a> 
  die Lesbarkeit erhöhen, all das gilt es zu bedenken. Das tut auch dieser Post.</p> 
<hr class="wp-block-separator has-alpha-channel-opacity">
<p class="has-text-align-right">Im Übrigen: <i class="fa-solid fa-venus-mars"></i> 
<a href="http://127.0.0.1/wpd.kr/wpd.kr/maenner-sind-mitgemeint/">Männer</a> 
sind <a href="http://127.0.0.1/wpd.kr/genderismus/">mitgemeint</a>.</p>
<p>The post <a href="https://karsten-reincke.de/fonts-fuer-besondere-anlaesse/">Fonts für besondere Anlässe</a> appeared first on <a href="https://karsten-reincke.de">Freigiebigkeit</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://karsten-reincke.de/fonts-fuer-besondere-anlaesse/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
