Keywords: , , , , , , , , , , , , ,

Hallo lieber Mecha CMS Leser! In diesem Artikel geht es um das NoFollow-Attribut bei externen Links beim Mecha v2.0.0 CMS. Ich musste es hier im Blog gerne ermöglichen, weil ich massenweise eigene Projektlinks setzen werde auch die Projektezusammenstellung hier im Blog unter Projekte wird meine Portfolio-Links enthalten. Dieses Blog ist nun mal keine Sammelstelle der Backlinks für das Portfolio und das soll auch Google nicht etwa denken. Daher mache ich das.

Der Mecha CMS Entwickler Tovic, welcher unter https://github.com/tovic agiert, brachte unter http://mecha-cms.com/snippet/a-rel-auto das kleine Tutorial mit dem nötigen Hook, welcher in der index.php des aktiven Shields angebunden wird. Diesen Hook bindest du dort bei den bereits vorhandenen Hooks ein. Der Hook geht folgendermassen.

Hook::set([
    'page.description',
    'page.content'
], function($content, $lot = []) use($url) {
    // Page type is not set or has value other than “HTML”, skip!
    if (!isset($lot['type']) || $lot['type'] !== 'HTML') {
        return $content;
    }
    // No anchor(s) found, skip!
    if (strpos($content, '</a>') === false) {
        return $content;
    }
    // Get anchor element(s) from page content…
    return preg_replace_callback('#<a(?:\s[^<>]*?)?>[\s\S]*?</a>#', function($m) use($url) {
        $a = HTML::apart($m[0]);
        // No `href` attribute, skip!
        if (!isset($a[2]['href'])) {
            return $m[0];
        }
        // Check for external link(s)…
        // Based on <https://github.com/tovic/parsedown-extra-plugin>
        $href = $a[2]['href'];
        $if = strpos($href, 'https://' . $url->host) === 0 ||
              strpos($href, 'http://' . $url->host) === 0 ||
              strpos($href, '/') === 0 ||
              strpos($href, '?') === 0 ||
              strpos($href, '#') === 0 ||
              strpos($href, 'javascript:') === 0 ||
              strpos($href, '.') === 0 ||
              strpos($href, '://') === false;
        // Double check for relative protocol…
        if (strpos($href, '//') === 0 && strpos($href, '//' . $url->host) !== 0) {
            $if = false;
        }
        // If external link…
        if (!$if) {
            // Add `rel="nofollow"` attribute
            $a[2]['rel'] = 'nofollow';
            // Add `target="_blank"` attribute
            $a[2]['target'] = '_blank';
        }
        // Re-unite the anchor…
        return call_user_func_array('HTML::unite', $a);
    }, $content);
    return $content;
}, 2.1);

Ich platziere es hier im Code-Block, damit du es besser kopieren kannst oder du entnimmst den Hook aus dem Tutorial von Tovic, oben verlinkt.

Falls es bei dir keine frische Mecha v2.0.0 Installation ist, werden die Inhalte der Seiten nach dem Einbinden des Hooks leider nicht mehr angezeigt. Um dies zu ermöglichen, muss man alle Pages im Mecha Backend unter Page wieder aktualisieren. Das solltest du machen, wenn du dein Blog wieder heil haben willst

Mecha v2.0.0 CMS - NoFollow Links bei externen Links

Das sollte es auch schon gewesen sein und ich werde weiterhin mit massenhaft eigenen Portfolio-Links hier im Blog arbeiten. Ich dachte mir dieses Mal nur, dass ich dir diesen Hook zeigen sollte, falls du ebenfalls ein grosses Portfolio hast und untereinander verlinkst. 

Bei Fragen zum Hook oder der Einbindung bitte darunter Kommentare hinterlassen. Da freue ich mich schon darauf.

by Alexander Liebrecht