WordPress – Wortzahl und geschätzte Lesezeit anzeigen

just-yum-yum-bloggerwissen-6

Vor Kurzem habe ich mir für mein WordPress-Theme Foodie Pro, das ich auf meinem Foodblog JUST YUM YUM verwende, das Feast Plugin installiert.

Neben vielen Theme-spezifischen Features, bietet das Plugin auch die Möglichkeit, bei einem Artikel – neben einigen anderen Informationen – die Wortzahl und geschätzte Lesezeit anzeigen zu lassen.

Leider ist das Plugin jedoch nur mit den auf dem Genesis Framework basierenden Feast Design-Themes kompatibel, weswegen ich mir jetzt für BLOGGERWISSEN diese Möglichkeiten der Anzeige selbst gebaut habe.

Warum die Wortzahl und die geschätzte Lesezeit anzeigen?

Die Wortzahl als auch die geschätzte Lesezeit anzeigen zu lassen, ist zunächst mal ganz grundsätzlich als eine Art Service für Deine Leser zu verstehen.

Es gibt aber auch einen verhaltenspsychologischen Ansatz, der sich folgendermaßen formulieren lässt:

Je mehr ich über etwas weiß, umso höher ist die Wahrscheinlichkeit, dass ich mich für etwas entscheiden werde.

Und dieser verhaltenspsychologischen Ansatz lässt sich für Deine eigene Webseite oder Deinen Blog positiv nutzen. Denn konkret angewendet auf einen Artikel und dessen Lesezeit, bedeutet dies:

Als Besucher eines Artikels werde ich mich eher zum Lesen entscheiden, wenn mir der Zeitaufwand von vorneherein klar ist.

Gerade auf mobilen Endgeräten kann die Anzeige der Lesezeit einen positiven Effekt haben:

Denn als mobiler Besucher sehe ich einem Text nicht mehr sofort an, wie lange ich herunterwischen muss, um das Textende zu erreichen. 

Wird aber die ungefähre Zeit für das Lesen angegeben, hilft es mir den Aufwand klarer einzuschätzen.

Wird also die Lesedauer angegeben, steigt die Wahrscheinlichkeit, dass der ganze Artikel gelesen wird – zumindest theoretisch .

Tritt dieser Fall dann auch in der Praxis ein, führt dies zu einem weiteren – aus Sicht als Webseiten- oder Blogbetreiber positiven – Effekt:

Die Anzeige der Lesezeit kann die Verweildauer Deiner Besucher auf Deiner Seite merklich erhöhen.

Und diese erhöhte Verweildauer zahlt wiederum positiv auf Deine Suchmaschinenoptimierung ein. Denn die Sitzungsdauer, wie die Verweildauer in der Webanalyse auch genannt, wie zählt zu den Ranking-Faktoren.

Die Krux mit der Wortanzahl

Insbesondere bei der Angabe dieser Information hege ich aktuell noch einige Skepsis.

Warum?

Ein Beispiel: Das Tutorial Affiliate Marketing – einfache Sticky Ad Box erstellen umfasst insgesamt 2.134 Wörter bei einer ungefähren Lesezeit von 11 Minuten.

Auf mich persönlich wirkt die Zahl 2.134 zunächst einmal eher abschreckend. Und ich habe die Vermutung, dass ich damit nicht alleine bin.

Aus diesem Grund beobachte ich derzeit die Angabe der Wortanzahl hinsichtlich ihres positiven oder negativen Effektes noch.

Daher habe ich bezüglich der Wortanzahl drei mögliche Auswirkungen definiert, die es in der kommenden Zeit zu testen gilt:

  1. Negative Wirkung: Die Verweildauer sinkt, während die Absprungrate (Bounce Rate) unverändert bleibt oder sogar steigt. Grund: Die angegebene Wortanzahl wird als zu hoch empfunden.
  2. Positive Wirkung: Die Verweildauer steigt, während die Absprungrate (Bounce Rate) unverändert bleibt oder sich sogar verringert. Grund: Die Angabe der Wortanzahl wird als positiv, also als nicht zu hoch empfunden. Im Idealfall suggeriert die hohe Zahl eine gewisse Thementiefe.
  3. Neutrale Wirkung: Die Verweildauer und die Absprungrate (Bounce Rate) bleiben gleich, weil die Angabe der Wortanzahl keine Rolle spielt.

Welche Informationen werden angezeigt

Welche Informationen angezeigt werden sollen, liegt ganz bei Dir. Zum Teil werden sie deckungsgleich mit meinen Meta-Informationen, andere ergeben sich aber vielleicht auch aus dem Thema Deiner Website beziehungsweise Deines Blogs.

Bei einem Foodblog könnten es beispielsweise Basisangaben zum jeweiligen Rezept sein, während es bei einem Fashionblog die Anzahl der gezeigten Looks sein können, und so weiter.

WordPress-Tutorial "Wortzahl und die geschätzte Lesezeit anzeigen": Beispiel für Wortzahl, geschätzte Lesezeit und weitere Metadaten auf BLOGGERWISSEN
Beispiel für Wortzahl, geschätzte Lesezeit und weitere Metadaten auf BLOGGERWISSEN

Bei den Meta-Informationen, die ich hier auf BLOGGERWISSEN zur Verfügung stelle, beschränke ich mich neben der Wortanzahl und der Lesedauer auf typische Standardangaben. Ich unterscheide dabei aber zwischen zwei Arten von Meta-Informationen:

  1. Informationen, die für Besucher sichtbar und teilweise für Suchmaschinen interpretierbar sind.
  2. Informationen, die für Besucher unsichtbar sind, aber von Suchmaschinen interpretiert werden.

Um einen Teil der Meta-Informationen – sichtbar wie unsichtbar – für Suchmaschinen interpretierbar zu machen und so einen Beitrag zur Suchmaschinenoptimierung von BLOGGERWISSEN zu leisten, verwende ich das Microdata-Markup Schema.org.

Für Leser

  • Datum der Veröffentlichung
  • Änderungsdatum
  • Link zu den Kommentaren
  • Wortzahl
  • Lesezeit in Minuten

Für Suchmaschinen

  • Angaben zum Autor
  • Abgaben zum Publisher
  • Überschrift des Artikels
  • Art des Artikels
  • Zielgruppe des Artikels

Über Schema.org

Die Schemata von Schema.org dienen der Kennzeichnung und Strukturierung von Inhalten auf Webseiten, damit diese Inhalte von Suchmaschinen einfacher weiterverarbeitet und interpretiert werden können. Sie werden beispielsweise für die Anzeige von Rich Snippets in den SERPs genutzt.

Bei der Anzeige meiner Meta-Informationen kommen folgende Schemata zum Einsatz:

Die Lesezeit ermitteln

Die Lesezeit bestimmt sich durch zwei Faktoren:

  1. Die Anzahl der Worte, die pro Minute gelesen werden können (WpM).
  2. Die Gesamtzahl der Worte, die ein Text enthält.

Worte pro Minute

Da ich die Anzahl der Worte, die pro Minute gelesen werden, im Skript fest definieren muss, bestimmt dieser Punkt entscheidend die geschätzte Lesezeit.

Auch wenn es sich schlußendlich um eine geschätzte Lesezeit handelt, solltest Du bei der Auswahl Deiner Worte pro Minute Bedacht walten lassen.

Aus meiner Sicht ist hier eine defensive Herangehensweise besser als eine offensive. Denn was hilft es Dir, wenn Dein Text aufgrund seiner Länge und/oder seiner Komplexität bei realen fünf Minuten liegt, anstatt bei (falsch) errechneten zwei Minuten?

Hier gilt es, realistisch zu bleiben und zu beachten, dass das Lesetempo je nach Leser, Textsorte, Stil und Stimmung variieren kann. 

Flesch Reading Ease Index als Indikator

Ein guter Indikator für die Komplexität eines Textes liefert hier das Yoast SEO Plugin mit seiner Lesbarkeits-Analyse, basierend auf dem Flesch Reading Ease Index (kurz: Flesch Index).

Innerhalb dieser Lesbarkeits-Analyse findest Du – neben vielen anderen Punkten – auch eine Angabe zum Flesch Reading Ease-Wert, den Dein Text erreicht. Dieser Wert sagt etwas darüber aus, wie leicht oder schwer ein Text zu lesen und zu verstehen ist.

Flesch Reading Ease Index

IndexwertLesbarkeitWpM
0 – 30 Sehr schwer100
30 – 50Schwer150
50 – 60Mittelschwer200
60 – 70Mittel250
70 – 80Mittelleicht300
80 – 90Leicht350
90 – 100Sehr leicht400

Als Beispiel: dieser Artikel erreicht einen Wert von 55,5. Er gilt laut Flesch Reading Ease Index somit als mittelschwer lesbarer Text.

Bedeutung für die geschätzte Lesedauer

Aus dem Flesch Reading Ease Index habe ich für mich die einfache Schlussfolgerung gezogen: Je niedriger der Indexwert ist, umso niedriger sollte auch der Wert für die lesbaren Worte pro Minute gewählt werden.

Da sich meine Texte auf BLOGGERWISSEN auch immer bei einem Wert zwischen 50 – 55 bewegen, also vergleichsweise schwer zu lesen sind, habe ich mich für 200 Worte pro Minute entschieden.

Die Gesamtwortzahl ermitteln

Nachdem ich mich nun entschieden habe, welche Größe ich als WpM verwenden möchte, muss ich nun die Gesamtzahl eines Artikel ermitteln.

Hierfür sind gleich ein paar Schritte erforderlich:

// word count
$jyy_bw_post_full = get_post($post->ID);
$jyy_bw_post_content = $jyy_bw_post_full->post_content;
$jyy_bw_post_content_decode = html_entity_decode($jyy_bw_post_content);
$jyy_bw_post_content_shortcode = do_shortcode($jyy_bw_post_content_decode);
$jyy_bw_post_content_strip_tags = wp_strip_all_tags($jyy_bw_post_content_shortcode,true);
$jyy_bw_post_content_count = str_word_count($jyy_bw_post_content_strip_tags);

Zunächst hole ich mir über die WordPress-Funktion get_post() das WP_Post Objekt, welches sämtliche Daten des aktuellen Artikels enthält.

Um jetzt den vollständigen Inhalt des Artikels zu erhalten, speichere ich den Inhalt aus dem Feld post_content in der Variablen $jyy_bw_post_content. Anschließend konvertiert ich mit Hilfe der PHP-Funktion html_entity_decode() sämtliche HTML-Entities im Artikel in ihre entsprechenden Zeichen und speichere die Rückgabe in der Variablen $jyy_bw_post_content_decode.

Da nicht auszuschließen ist, dass ein Artikel auch Shortcodes enthält, lasse ich die Variable $jyy_bw_post_content_decode noch durch die WordPress-Funktion do_shortcode() laufen. So sorge ich dafür, dass auch Inhalte, die erst durch das Ausführen von Shortcodes erzeugt werden, in die Zählung einbezogen werden können.

Nachdem ich mit der WordPress-Funktion wp strip all tags() alle HTML-Tags entfernt habe, kann es nun endlich an das Zählen der Worte gehen.

Dazu verwende ich die PHP-Funktion str_word_count(), die mir die Anzahl der gefundenen Wörter zurückgibt. Diesen Wert speichere ich in meiner Variablen $jyy_bw_post_content_count.

Geschätzte Lesezeit berechnen

Nachdem ich meine Worte pro Minute festgelegt und die Wortanzahl eines Artikels ermittelt habe, kann ich jetzt die geschätzte Lesedauer berechnen.

// reading time calculation
$jyy_bw_post_content_words_per_minute = 200;
$jyy_bw_post_content_reading_time = intval(ceil($jyy_bw_post_content_count / $jyy_bw_post_content_words_per_minute));

Hier kommen gleich zwei PHP-Funktionen zum Einsatz:

  1. ceil() rundet den Wert aus der Berechnung zur nächsten ganzen Zahl auf.
  2. intval() konvertiert den Wert aus der Berechnung in eine Ganzzahl.

Den Wert, der nach der Berechnung in der Variablen $jyy_bw_post_content_reading_time gespeichert wird, kann ich jetzt im Frontend ausgeben. Um die Wortanzahl in der Variablen $jyy_bw_post_content_count für meine Leser schneller erfassbar zu machen, verpasse ich der Wortanzahl mit Hilfe der PHP-Funktion number_format() noch ein Tausender-Trennzeichen.

echo(number_format($jyy_bw_post_content_count,0,',','.') . ' Wörter • Lesezeit: ca. ' . $jyy_bw_post_content_reading_time . ' Minuten'); 

Code Snippet: Wortzahl und geschätzte Lesezeit anzeigen

Nachfolgend findest Du das vollständige Code Snippet wie es hier auf BLOGGERWISSEN zum Einsatz kommt, inklusive der Auszeichnung mit dem Schema.org-Markup.

Da ich neben der Wortanzahl und der geschätzten Lesezeit lediglich Standardinformationen anzeigen lasse, kannst Du das Code Snippet 1 zu 1 übernehmen.

Es kann allerdings nicht schaden, wenn Du nochmal prüfst, ob das von Dir verwendete WordPress-Theme einen passenderen action-Hook als loop_start() zur Verfügung stellt.

add_action('loop_start','jyy_bw_count_words',1);
function jyy_bw_count_words(){
	if(is_single()){
		global $post;
		// get post author's name
			$jyy_bw_post_author = get_the_author_meta('display_name');
		// get the post title
			$jyy_bw_post_title = get_the_title($post->ID);
		// get published date
			$jyy_bw_post_published_date_display = get_the_time('d.m.Y', $post->ID);
			$jyy_bw_post_published_date_meta = get_the_time('Y-m-d', $post->ID);
			$jyy_bw_post_published_time_meta = get_the_time('H:i:s', $post->ID);
			$jyy_bw_post_published_time_compare = get_the_time('Ymd', $post->ID);
		// get modified date
			$jyy_bw_post_modified_date_display = get_the_modified_date('d.m.Y', $post->ID);
			$jyy_bw_post_modified_date_meta = get_the_modified_date('Y-m-d', $post->ID);
			$jyy_bw_post_modified_time_meta = get_the_modified_date('H:i:s', $post->ID);
			$jyy_bw_post_modified_time_compare = get_the_modified_date('Ymd', $post->ID);
		// get full post url
			$jyy_bw_post_full_url = get_permalink($post->ID);
		// get parent category name
			$jyy_bw_post_category = get_the_category();
			$jyy_bw_post_category_parent = $jyy_bw_post_category[0]->cat_name;
		// word count
			$jyy_bw_post_full = get_post($post->ID);
			$jyy_bw_post_content = $jyy_bw_post_full->post_content;
			$jyy_bw_post_content_decode = html_entity_decode($jyy_bw_post_content);
			$jyy_bw_post_content_shortcode = do_shortcode($jyy_bw_post_content_decode);
			$jyy_bw_post_content_strip_tags = wp_strip_all_tags($jyy_bw_post_content_shortcode,true);
			$jyy_bw_post_content_count = str_word_count($jyy_bw_post_content_strip_tags);
		// reading time
			$jyy_bw_post_content_words_per_minute = 200;
			$jyy_bw_post_content_reading_time = intval(ceil($jyy_bw_post_content_count / $jyy_bw_post_content_words_per_minute));

		// rendering post meta information
			echo('
				<div itemscope itemtype="https://schema.org/WebPage">
					<span itemprop="author" itemscope itemtype="https://schema.org/Person">
						<meta itemprop="name" content="' . $jyy_bw_post_author . '">
					</span>
					<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
						<link itemprop="url" content="https://justyumyum.media" />
						<meta itemprop="name" content="JUST YUM YUM Bloggerwissen">
					</span>

					<meta itemprop="headline" content="' . $jyy_bw_post_title . '">
					<p class="entry-meta">Veröffentlicht am <time itemprop="datePublished" content="' . $jyy_bw_post_published_date_meta . 'T' . $jyy_bw_post_published_time_meta . '">'  . $jyy_bw_post_published_date_display . '</time> •
			');

		if($jyy_bw_post_modified_time_compare != $jyy_bw_post_published_time_compare){
				echo('Letzte Änderung am <time itemprop="dateModified" content="' . $jyy_bw_post_modified_date_meta . 'T' . $jyy_bw_post_modified_time_meta . '">' . $jyy_bw_post_modified_date_display . '</time> •');
			}

		echo('  <span class="entry-comments-link">
					<a href="' . $jyy_bw_post_full_url . '#respond">Kommentar hinterlassen</a>
				</span> • ' . number_format($jyy_bw_post_content_count,0,',','.') .' Wörter • 
				<meta itemprop="learningResourceType" content="' . $jyy_bw_post_category_parent .' Tutorial">
				<span itemprop="audience" itemscope itemtype="https://schema.org/PeopleAudience">
					<meta itemprop="audienceType" content="bloggers, wordpress users, wordpress developers">
				</span>
					<span itemprop="timeRequired" content="PT' .$jyy_bw_post_content_reading_time . 'm">Lesezeit: ca. ' .$jyy_bw_post_content_reading_time . ' Minuten</span>
				</span>
				</span>
				</p>
		</div>');
	} //close if (is_single()
} // close function

Individuelle Lesezeit anzeigen

Falls Du eine Webseite oder einen Blog betreibst, bei dem der Wert des Flesch Reading Ease Index je Artikel stark variiert, kann es sinnvoll sein, den Standardwert für die Worte pro Minute auf Artikelbasis individuell anpassen zu können.

Dies lässt sich ganz einfach mit einer eigenen Meta-Box bewerkstelligen:

add_action('add_meta_boxes','add_meta_box_readingTime');
add_action('save_post','save_meta_box_readingTime',10,2);

function add_meta_box_readingTime(){
	add_meta_box('reading-time-id','Worte pro Minute','create_meta_box_readingTime','post','side','high');
} // close function
	
function create_meta_box_readingTime($post)	{
	$meta_box_readingTime_value = get_post_custom( $post->ID );
	if(isset($meta_box_readingTime_value['meta_box_readingTime_input'])){
		 $meta_box_readingTime_custom = esc_attr($meta_box_readingTime_value['meta_box_readingTime_input'][0]);
		} else {
			$meta_box_readingTime_custom ='';
		}
	wp_nonce_field('meta_box_readingTime_custom_nonce','meta_box_readingTime_nonce' );
	echo (	'<input type="number" style="width:100%" id="meta_box_readingTime_input" name="meta_box_readingTime_input" value="' . $meta_box_readingTime_custom . '" />
			<label style="display:block" for="meta_box_readingTime_input">Anzahl der gelesenen Wörter pro Minute für diesen Artikel.</label>
			');
} // close function
	
 
function save_meta_box_readingTime($post_id, $post){
	if(defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE ){
		return;
	}
  	
   	if(!isset($_POST['meta_box_readingTime_nonce']) || !wp_verify_nonce($_POST['meta_box_readingTime_nonce'],'meta_box_readingTime_custom_nonce')){
		return;
	}
  	
 	if(!current_user_can('edit_post',$post_id)){
		return;
	}
	
	if(isset($_POST['meta_box_readingTime_input'])){
			$meta_box_readingTime_update = $_POST['meta_box_readingTime_input'];
		} else {
			$meta_box_readingTime_update = '';
	}
  	
	update_post_meta($post_id,'meta_box_readingTime_input',$meta_box_readingTime_update);
  }

Das Skript erzeugt in der rechten Seitenleiste des Artikel-Editors ein Eingabefeld, über die Du jetzt eine abweichende Anzahl der Wörter pro Minute angeben kannst.

Code Tutorial: WordPress - Wortzahl und geschätzte Lesezeit anzeigen - Standardwert für Worte pro Minute (WpM) mit Meta-Box überschreiben

Deine abweichende Eingabe wird dabei in den Metadaten des jeweiligen Artikels gespeichert und kann so im Skript zur Berechnung und Anzeige der geschätzten Lesezeit verwendet werden.

Damit Deine Wortanzahl anschließend für die Berechnung verwendet werden kann, musst Du nun noch die Codezeile 31 im ursprünglichen Skript folgendermaßen anpassen:

if(get_post_meta($post->ID,'meta_box_readingTime_input',true)){
			$jyy_bw_post_content_words_per_minute = get_post_meta($post->ID,'meta_box_readingTime_input',true);
			} else {
				$jyy_bw_post_content_words_per_minute = 200;
			}

Die Änderung des Codes sorgt jetzt dafür, dass bei Aufruf des jeweiligen Artikels zunächst geprüft wird, ob eine abweichende Zahl angegeben wurde.

Ist dies der Fall, wird der abweichende Wert verwendet. Andernfalls greift der Standardwert von 200 Wörtern pro Minute.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.