Linux: Cronjob einrichten

Ein Cronjob ist vergleichbar mit einen Scheduled Task (Geplante Task) in der Windows-Welt. Ausgeführt werden die Jobs über die sogenannte Crontab, einer Liste, die hauptsächlich die Zeitsteuerung und den ausführenden Befehl für den Job enthält.

Crontab einrichten, Cronjob anpassen
Ein Cronjob wird in der Crontab angepasst. Um die Liste aufzurufen oder zu ändern, muss ein Shell-Zugriff (zum Beispiel per putty vorliegen. Bearbeitet kann die Cronatb mit jedem Editor von Linux. Ich empfehle den Editor „vi“ und beziehe mich in diesem Artikel auf den Syntax dieses Editors.

Crontab Steuerbefehle
Der Befehl „crontab“ kann vier Parameter haben:

  • „crontab –e“: Mit diesem Aufruf wird die Crontab zum Ändern (editieren) aufgerufen. Wenn die Crontab noch nicht vorhanden ist, wird sie automatisch angelegt
  • „crontab –l“: Zeigt die Crontab auf dem Bildschirm an („l“ wie „lesend“, keine Eselsbrücke)
  • „crontab –r“: Löscht die Crontab („Remove“)
  • „crontab –v“: Zeigt das letzte Änderungsdatum der Crontab an. Dieser Befehl ist nicht auf allen Linux-Systemen vorhanden.

Der Aufbau einer Crontab-Zeile (Cronjob)
Der Aufbau einer Zeile erfolgt nach einem festen Muster. In jeder Zeile steht ein Job. Je nach Editor kann eine Zeile sich über mehrere Zeilen erstrecken (wenn der Aufrufparameter beispielsweise sehr lang ist). Es handelt sich jedoch nur um eine Zeile.

* * * * * Aufruf-des-Skriptes (Befehl)
| | | | |
| | | | +---- Tag der Ausführung (0 -6, Sonntag = 0)
| | | +------ Monat (1-12)
| | +-------- Tag (1-31)
| +---------- Stunde (0-23)
+------------ Minute (0-59)

Wichtige Parameter:
„*“ Der Stern steht für IMMER. Steht ein Stern im Feld „Monat“, wird der Job auf jeden Fall jeden Monat ausgeführt. Steht er im Feld Tag, wird der Job jeden Tag ausgeführt

„/“: Wiederholung: „/2“ im Feld Minute steht beispielsweise für „alle zwei Minuten“, „/5“ im Feld Stunde steht für „alle fünf Stunden“

Crontab Beispiele

Einen Cronjob jeden Tag zu einer bestimmten Uhrzeit ausführen

# Job wird jeden Tag um 23:30 Uhr ausgeführt
30 23 * * * /user/skript-pfad/skript.sh

Cronjob zu einer bestimmten Uhrzeit zum 1. eines bestimmten Monats ausführen

# Job wird jeden 1. im Januar, April,Juni und September um 0:30 Uhr ausgeführt
30 0 1 1,4,6,9 * * /user/skript-pfad/skript.sh

Einen Cronjob an einem bestimmten Tag ausführen

# Job wird jeden 10. eines Monats um 0:20 Uhr ausgeführt
20 0 10 * * /user/skript-pfad/skript.sh

Einen Cronjob im Intervall ausführen

# Job wird an jedem Sonntag um 0:30, 2:30, 4:30 (…) ausgeführt
30 /2 * * 0 /user/skript-pfad/skript.sh

Einen Cronjob jede Minute ausführen

# /1=minütlich, /5=alle fünf Minuten – wenn an erster Stelle
/1 * * * * /user/skript-pfad/skript.sh

Cronjob am ersten Werktag eines Monats ausführen

Leider kenne ich keine einzeilige Lösung für dieses Problem. Mit zwei Zeilen in der Crontab ist dies jedoch durchaus machbar.

0 8 1 * 1-5 /pfad/script.sh
0 8 2,3 * 1 /pfad/script.sh

Was machen wir hier? In der ersten Zeile starten wir um 8:00 Uhr („0 8“ ) jeden 1. eines Monats („1“) in jedem Monat („*“) das Skript, aber NUR Montag bis Freitag („1-5“). Diese Zeile trifft also zu, wenn der Monatserste auf einen Werktag trifft.
Fällt der Monatserste jedoch auf einen Samstag oder Sonntag, wird hierfür die zweite Zeile benötigt. Diese trifft zu, wenn der der 2. oder 3. eines Monats auf einen Montag fällt.
Gibt es eine bessere Lösung? Schreibt diese gerne in die Kommentare!

Crontab – die Zusammenfassung

Wie hoffentlich zu erkennen ist, kann diese anfangs doch sehr ungewohnte und erst einmal umständlich wirkende Schreibweise alle wünschenswerte Szenarien abdecken. Der Aufbau ist sehr flexibel und lässt keine Wünsche offen. Er bedarf jedoch einiger Übung. Ein Tippfehler oder gar ein „*“ an erster Stelle (=Minute) kann eventuell zu sehr unerwünschten Ergebnissen führen. Daher der Praxistipp, einen neuen Zeitplan erst einmal mit „harmlosen“ Jobs auszuprobieren (Administrator-Mail senden etc).

Cronjob Email
Je nach Einstellung verschickt das Betriebsystem nach jeder Ausführung eines Cronjobs eine automatische Mail. Wie Sie diese deaktivieren können, erfahren Sie im Artikel „Cronjob: Email abschalten

FritzDECT 200 Schaltsteckdose mit C# steuern

fritz dect 200 mit C# steuern

Der Markt an schaltbaren Steckdosen, die per LAN ansprechbar sind, ist sehr klein und die Geräte teuer. Bisher habe ich eine ALLNET ALL3075 für ein Projekt verwendet, bei dem ein weiteres Netzwerkgerät per Skript Strom zugeführt und genommen wird. Da nach etlichen Jahren die Steckdose defekt war und diese Version auch nicht mehr im Handel ist, musste eine Alternative gefunden werden.

Die Alternative ist die Fritz!DECT 200, eine Schaltsteckdose, die eigentlich ein Verbrauchsmesser ist. Als Zwischenstecker misst die Steckdose den Verbrauch und gibt die Daten via DECT an die FritzBox weiter.
Eher als Zugabe hat die DECT 2000 einen fest verbauten Taster, mit dem der Strom an- und ausgeschaltet werden kann. Aber auch über die FritzBox lässt sich die Schaltsteckdose regeln. Manuelles Schalten wie auch eine Zeitschaltung lässt sich über die Software der FritzBox realisieren.

Wie erhält die FritzDECT 200 ihre Schaltbefehle?

Die Befehle werden per DECT von der FritzBox zur Schaltsteckdose übertragen. Dies geschieht ohne große Latenz. Ohne dies genau gemessen zu haben, erfolgt die Schaltung unmittelbar nach dem Auslösen des Befehles.

Wäre eine Schaltung per LAN nicht besser?

Da in meinem Projekt die Schaltsteckdose im Netzwerkschrank verschwindet und in Armlänge ein Netzwerkswitch vorhanden ist, hätte mir eine LAN-Steckdose eher zugesagt. Doch die geringen Kosten der Fritz-Schaltsteckdose hat den Ausschlag gegeben, es auf diesem Wege zu probieren. Weiterer Vorteil, der jedoch bei mir nicht zutrifft: Durch die DECT-Funkverbindung ist man mit dieser Lösung LAN-unabhängig.

fritz dect 200 mit C# steuern
Über die sogenannte AIN wird die Fritz Schaltsteckdose angesprochen. Diese ist jeder Fritz200 individuell zugeordnet. Die AIN ist auf der Rückseite aufgedruckt, kann aber auch über die Fritz!Box abgefragt werden.

Was kostet die Steckdose an laufendem Strom?

Diese sind gering. Heise Online gibt in einem Artikel „Strom sparen mit smarten Zwischensteckern“ an, dass das Modell im Leerlauf ein halbes Watt benötigt, bei Volllast 1,1 Watt. Dies sind nach Berechnung von Heise 0,30 bzw. 2,89 Euro pro Jahr.

Code-Beispiel: Die FritzDECT 200 mit C# an- und ausschalten

Im folgenden C#-Code wird ein Login-Zugang mit der Fritz-Box durchgeführt und die SID ausgelesen. Hierfür nutze ich einen speziellen Benuter, der nur Rechte auf die SmartHome-Geräte hat.
Wenn man die SID ausgelesen hat, ist das weitere Vorgehen einfach. Der Aufruf einer URL mit bestimmten Parametern schaltet die Steckdose an und aus. In diesem Listing habe ich auf das Auslesen aller AIN verzichtet. Natürlich ist auch dies möglich und man kann eine Software schreiben, die alle Geräte ausliest, diese darstellt und zum An- und Ausschalten anbietet. Hier kann auf die eigene Anforderung eingegangen werden.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Net;
using System.Security.Cryptography;
using System.IO;

namespace FRITZ_DECT_200
{
class Program
{
static void Main(string[] args)
{
//Möglichst eigener SmartHome-Benutzer
string benutzername = "SmartHome";
string kennwort = "#HIER DAS PASSWORT#";

//Fritz!DECT AIN -> Über die Fritzbox ermitteln oder ablesen (ist auf dem Fritz!DECT 200 auf der Rückseite aufgedruckt
string sAIN = "119900143999";

// Die SessionID muss ermittelt werden
string sid = GetSessionId(benutzername, kennwort);

//Die Schaltung der Steckdose erfolgt nun über den Aufruf einer URL
string sURL = string.Empty;

//TODO: Hier Entscheidung treffen, ob Schaltsteckdose an- oder ausgeschaltet werden soll

//switchOn
sURL = string.Format("http://fritz.box/webservices/homeautoswitch.lua?switchcmd=setswitchon&sid={0}&ain={1}", sid, sAIN);

//switchOff
//sURL = string.Format("http://fritz.box/webservices/homeautoswitch.lua?switchcmd=setswitchoff&sid={0}&ain={1}", sid, sAIN);

//URL öffnen, der Schaltvorgang wird ausgelöst
string sRes = SeiteEinlesen(sURL);

//Logout senden
sURL = string.Format("http://fritz.box/login.lua?page=/home/home.lua&logout=1&sid={0}", sid);
sRes = SeiteEinlesen(sURL);

}

public static string GetSessionId(string benutzername, string kennwort)
{

//-------------------< GetSessionId() >-------------------

// Der Login-Vorgang wird ausgelöst und die SID zurückgegeben
XDocument doc = XDocument.Load(@"http://fritz.box/login_sid.lua");
string sid = fl_Get_Value_of_Node_in_XDocument_by_NodeName(doc, "SID");

if (sid == "0000000000000000")
{
string challenge = fl_Get_Value_of_Node_in_XDocument_by_NodeName(doc, "Challenge");
string sResponse = fl_GetResponse_by_TempUser_Passwort(challenge, kennwort);

string uri = @"http://fritz.box/login_sid.lua?username=" + benutzername + @"&response=" + sResponse;
doc = XDocument.Load(uri);

sid = fl_Get_Value_of_Node_in_XDocument_by_NodeName(doc, "SID");
}
return sid;

//-------------------</ GetSessionId() >-------------------

}

#region ----< helper-methods >------

public static string SeiteEinlesen(string url)
{
//-------------------< SeiteEinlesen() >-------------------
//*read page with sid access, by webrequest

Uri uri = new Uri(url);
HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
StreamReader reader = new StreamReader(response.GetResponseStream());
string str = reader.ReadToEnd();
return str; //*return string-result
//-------------------</ SeiteEinlesen() >-------------------
}

public static string fl_Get_Value_of_Node_in_XDocument_by_NodeName(XDocument doc, string name)
{
XElement info = doc.FirstNode as XElement;
return info.Element(name).Value;
}

public static string fl_GetResponse_by_TempUser_Passwort(string challenge, string kennwort)
{
//-------------------< get fritzbox-challenge+hashcode () >-------------------
return challenge + "-" + fl_Get_MD5Hash_of_String(challenge + "-" + kennwort);
//-------------------</ get fritzbox-challenge+hashcode () >-------------------
}

public static string fl_Get_MD5Hash_of_String(string input)
{
//-------------------< fl_Get_MD5Hash_of_String() >-------------------
//*create hashcode from string
MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash(Encoding.Unicode.GetBytes(input));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sb.Append(data[i].ToString("x2"));
}
return sb.ToString();
//-------------------</ fl_Get_MD5Hash_of_String() >-------------------
}
#endregion ----</ helper-methods >------

//ENDE
}
}

Tutorial: Raspian OS unter Hyper-V installieren

In diesem Artikel beschreibe ich, wie man einen Raspberry Pi virtualisiert bzw. wie man das das Raspbian OS unter Hyper-V installiert. Dies birgt leider einige Punkte, die man bei der Installation beachten sollte. Natürlich stellt sich sofort die Frage, warum man einen Raspberry überhaupt virtualisieren sollte. Um etwas zu testen, sei es eine Installation oder eine Konfiguration, macht dies durchaus Sinn. Wenn man mit dem Raspberry PINs ansteuert, beispielsweise für das Smart Home, sind der Virtualisierung natürlich Grenzen gesetzt.

Wichtig ist, dass man im ersten Schritt die richtige Form des Betriebsystemes, hier Raspbian, herunterläd. Um die SD-Karte des Raspberrys zu bestücken, werden IMG-Dateien, also bereits vorgefertigte Abbilder, benutzt. Um Raspbian unter Hyper-V zu installierten, benötigen wir das ISO des Betriebsystemes. Dies gibt es aktuell hier: https://www.raspberrypi.org/downloads/raspberry-pi-desktop/

Also zuerst das ISO herunterladen, dann Hyper-V starten. Im Hyper-V-Manager wird mittels NEU ein neuer VIRTUELLER COMPUTER angelegt.

Im Hyper-V-Manager wird unter NEU/VIRTUELLER COMPUTER der neue virtuelle Raspberry angelegt.

Dann werden die Vorbemerkungen bestätigt und dem virtuellen Rechner einen Namen gegeben (hier: „Raspi“)

Im nächsten Schritt werden die ersten Einstellunge für den virtuellen Raspberry getroffen.

Im nächsten Schritt wird die Generation des virtuellen Computers angelegt. Ich wähle hier die „Generation 1“. Die „Generation 2“ läuft auch; es kam bei mir jedoch manchmal zu Problemen. Als Hauptspeicher kann „1024 MB“ verwendet werden. ACHTUNG: Nur in manchen Installationen verwende ich den „dynamischen Hauptspeicher“, wie hier zu sehen. In der Regel gebe ich dem virtuellen Raspberry nur fixe 1024 MB.

Als Generation wird die „Generation 1“ ausgewählt. 1024 MB Hauptspeicher genügen dem Raspberry Pi.

In den kommenden zwei Fenster wird der Switch, also die Verbindung zur Netzwerkkarte und die virtuelle Festplatte festgelegt. Hier langt eine Festplatte der Größe 8 oder 16 GB in der Regel aus, da der Raspberry mit einer SD-Karte nur in den seltensten Fällen Speicher jenseits der 16GB hat.
Dann wird die heruntergeladene ISO-Datei als DVD-Rom-Laufwerk eingebunden. Im nächsten Fenster sollte noch einmal alle Einstellungen überprüft werden. Wenn alles OK ist, den Button „FERTIG STELLEN“ drücken.

Wichtig: Hyper-V kann keine .img-Dateien für die Installtion verwenden. Sie müssen ein ISO einbinden.

Dann wird der virtuelle Raspi gestartet. Hyper-V läd die ISO-Datei und der Installationsprozess beginnt. Hier muss nun „Install“ gewählt werden. Je nach verwendeter Version des OS genau schauen, dass die „permanente Installation“ gewählt und das Betriebssystem nicht nur flüchtig im Hauptspeicher gestartet wird.

Nun wir die Disk partitioniert. Wenn nichts Spezielles gewünscht wird, nutzt die folgenden Einstellungen:

Die Partition wird per Standardeinstellung bestätigt.

Nun wird noch bestätigt, dass die Daten in eine Partition geschrieben werden soll und der „GRUB boot loader“ installiert werden soll.

Der GRUB Bootloader wird installiert

Nun wird noch das ZIEL für den „GRUB boot loader“ angegeben und die Installation ist gleich vollbracht.

Die Installation ds virtuellen Raspberry Pi ist erst einmal erledigt.

Im nächsten Schritt sollte die die grafische Oberfläche des Raspi OS melden. In den folgenden Menüpunkten sind die Spracheinstellungen und das Keyboard anzugeben.

Nun startet der virtuelle Raspberry Pi mit seinem gewohnten Setup. Hier haben wir die Version mit grafischer Oberfläche installiert. Natürlich kann auch die schmale Lite-Version installiert werden.

Kleine Helferlein

IPAdresse ermitteln

ifconfig

SSH aktivieren

In den aktuellen Raspi-OS-Versionen ist SSH bereits installiert, jedoch nicht aktiviert. Über die Konsole den nachfolgenden Befehl eingeben, um SSH zu aktivieren:
sudo raspi-config
Im nachfolgenden Menü „ssh“ auswählen und aktivieren

C#: Dateien löschen, die älter als x-Tage/Datum sind

Im Artikel „Dateien automatisiert löschen, die älter als x-Tage/Datum sind“ habe ich vor langer Zeit gezeigt, wie man Dateien mittels Batch-Datei löschen kann, die ein bestimmtes Alter überschritten haben. Eine solche Funktion ist sinnvoll, wenn man beispielsweise Logfiles nur eine gewisse Zeit vorhalten und verhindern möchte, dass die Festplatte voll läuft.
Eine ähnliche Funktion werden wir heute schreiben, jedoch mittels C#. Ziel ist es hier, dass eine Anwendung selbst ihr Logfile-Verzeichnis überwacht und Dateien löscht, die älter als X-Tage sind.
Die nachfolgende Funktion „DeleteFiles“ erledigt dies für uns. Der Funktion muss das entsprechende Verzeichnis (Pfad als String) und die Anzahl tage (als Integer) übergeben werden. Dann ruft die Funktion das Verzeichnis auf und ermittelt alle Files, die im Verzeichnis liegen. Auskommentiert ist ein TXT-Filter. Wenn also ein bestimmter Dateityp im Verzeichnis überwacht werden soll, kann „GetFiles(„*“)“ in beispielsweise „GetFiles(„*txt“)“ geändert werden.
In der folgenden foreach-Schleife gehen wir die ermittelten Files durch und ermitteln das Datum der Datei. Hier stoßen wir auf das erste Problem. Sinnvoll klingt das „fi.CreationTime“. In den meisten Fällen ist dies auch das Datum, nach welchem wir uns richten möchten. Leider handelt es sich bei diesem Datum nicht um das Datum, welches wir im Explorer bei einer Datei „sehen“. Wenn wir die Dateien beispielsweise von A nach B kopieren, bleibt das File-Datum im Explorer bestehen, die „CreationTime“ ist jedoch neu gesetzt. Abhilfe KANN das „LastWriteTime“ schaffen. Gerade bei Logfiles sollte dies zum gewünschten Ergebnis führen.
Der restliche Code ist hier sehr umständlich, damit man ihn gut nachvollziehen kann. Wir ermitteln mittels TimeSpan die Differenz zwischen File-Datum und aktuellem Datum (Double), und konvertieren es in einen Integer-Wert. In der folgenden If-Abfrage schauen wir nach, ob die Differenz in Tagen über einem bestimmten Wert liegt. Wenn ja, löschen wir das File.

Im nachfolgenden Beispiel sind noch Aufrufe zur Funktion „LogFile“, die natürlich individuell angepasst werden müssen.

 

public void DeleteFiles(string sDirectory, int iTage)
{
	DirectoryInfo di;
    FileInfo[] files;
    try
    {
		//ermittel das Verzeichnis
		di = new DirectoryInfo(sDirectory);
		
		//existiert das Verzeichnis?
        if (Directory.Exists(sDirectory))
        {
			//files = di.GetFiles("*txt");
            files = di.GetFiles("*");

            foreach (FileInfo fi in files)
            {
		//fi.CreationTime; CreationTime klappt nicht bei kopierten Dateien!
                DateTime dtFile = fi.LastWriteTime;
                TimeSpan t = DateTime.Now - dtFile;
                double NrOfDays = t.TotalDays;
                int iAlter = Convert.ToInt32(NrOfDays);


                // Lösche die Dateien
                if (iAlter >= iTage)
                   fi.Delete();
            }
        }
        else LogFile("Fehler in DeleteFiles: Das übergebene Directory ("+ sDirectory + ") existiert nicht!");
    }
    catch (Exception ex)
    {
		LogFile("Fehler in DeleteFiles: " + ex.Message);
    }
}

Youtube SEO – wie man das Ranking verbessert – Teil 3 von 3

Teil 1 verpasst? Hier geht es zu Youtube SEO – wie man das Ranking verbessert – Teil 1 von 3

Test 4: Tumblr-Blogs zu bestehendem Video

Nun versuche ich ein bestehendes Video aus meinem Kanal (145 Abonnenten) über Tumblr-Blogs im Ranking zu verbessern. Das Video ist bisher nur auf der Money-Site eingebunden, die bisher noch nicht wirklich optimal rankt. Das Video ist aktuell zwei Monate online, hat gerade einmal 91 Aufrufe, 4 Likes und ein Kommentar. Es wird im Folgenden unter drei Keywords/Kombis beobachtet:

  1. portweiterleitung Seite 1, Platz 6
  2. portweiterleitung ip kamera, Seite 1, Platz 12
  3. portweiterleitung fritz box, Seite 3, Platz 18

Für die Optimierung sollen in zwei Tranchen je 2 Tumblr-Blogs das Video einbetten. An dem Aufbau „Blog 1 verlinkt das Video direkt, Blog 2 relinkt Video von Blog 1“ halte ich fest. Es werden jedoch sehr unterschiedlich „starke“ expired Blogs sein, gemessen an Majestics Kennzahlen.
Recht schnell zeigte sich eine Verbesserung des Rankings der ersten zwei Keywords. Die Keyword-Kombi 3 bliebt im beobachteten Zeitraum unverändert. Nach ein paar Tagen verschlechterte sich das Ranking von Keyword 1, zeigte aber ein verbessertes Ranking als zum Beginn der Optimierung. Die Keyword-Kombi 2 verbesserte sich um einige Platze gegenüber dem Start. Diese Verbesserung war im beobachteten Zeitraum konstant.

Ergebnis

Mir ging es darum zu erkennen, ob man nachträglich noch das Ranking von Youtube-Videos verbessern kann. Dass das Video an sich gut sein sollte, dass der Titel die Beschreibung des Videos und das Tagging optimiert sein muss, war für mich selbstverständlich.
So zeigte sich, dass Videos deutlich schneller ein besseres Ranking hatten, wenn diese in einem bestehenden Kanal mit Abonnementen veröffentlich wurden. Durch Kommentare, Abonnenten und Likes konnte das Ranking auch bei einem neuen Konto deutlich verbessert werden.
Auch zeigte sich, dass das externe Einbinden eines Videos über Expired Tumlr-Domains Einfluss auf das Ranking hatte. Dieser Effekt war messbar – jedoch leider nicht so stark, wie gehofft. In wieweit Majestics Trust eine Rolle spielt, konnte ich nicht zweifelsfrei nachweisen. Die Beobachtung war, das bei nicht stark umkämpften Keywords auch „schwache“ Blogs das Ranking deutlich verbesserte. Bei hart umkämpften Keyword hatten starke (gemessen an Majestics Trust) Blogs zwar messbaren Einfluss, jedoch nicht so stark, wie gehofft.

Was man sich schenken kann

  1. Vergisst „SEO Pakete“ wie „1000 Likes und 1000 Views für optimales Ranking bei Youtube“. Bullshit.
  2. Vergesst aber auch SEO Pakete wie „1000 Abonnenten“ für Euren Kanal. Die werden durch Bots erzeugt – und das kann nach hinten losgehen.

Was wichtig ist für das Youtube-Ranking

  1. Optimale Keyword-Vergabe im Titel, in der Beschreibung und im Tagging
  2. Abonnenten für den Kanal scheinen ein wichtiges Ranking-Kriterium zu sein. Baut sukzessive Abonnenten für Euren Kanal auf.
  3. Das Einbinden eines Videos in einer bereits verlinkten Seite (expired Domain), bringt Rankingvorteile. Die Gier nach möglichst hohem TrustFlow ist m.E. nicht notwendig. Wahrscheinlich bringen mehrere weniger „auffällige“ Seiten mehr, als eine „hochgezüchtete“ Seite. Hier bin ich jedoch noch den Beweis „schuldig“.

Youtube SEO – wie man das Ranking verbessert – Teil 2 von 3

Teil 1 verpasst? Hier geht es zu Youtube SEO – wie man das Ranking verbessert – Teil 1 von 3

Test 2: Neues Video zu bestehenden Kanal

Auf einem anderen Youtube-Kanal veröffentliche ich in unregelmäßigen Abständen Erklär-Videos, die auch alle auf diversen Moneysites in den entsprechenden Fachartikel eingebunden sind. Diese Videos ranken – je nach Keyword – auch sofort einigermaßen gut. Der Kanal hat inzwischen rund 150 (reale) Abonnenten.
Ein neues Video wurde hier eingefügt. Die Keyword-Kombi besteht aus zwei Keys. Das erste Key ist sehr hart umkämpft. Das zweite Key weniger, aber dennoch ist die Konkurrenz sehr groß. In den ersten Tagen mit dem Start war das Video über die Keys fast nicht zu finden. Ein erstes Like eines bestehenden Abonnenten mit Verlinkung zu seinem Google+-Konto wurde durchgeführt. So rankte das Video bei Youtube unter dem hart umkämpften Keyword auf Seite 12, in der Kombi immerhin auf Seite 2 (Platz 2).

Ebenfalls wurden zwei Expired Tumblr Konten belebt. Diesmal handelt es sich um „frische“ Konten. Der TrustFlow lag jedoch nur bei Blog 1 bei 5 (mit 55 Ref-IPs), bei Blog 2 bei 11 (mit 59 Ref-IPs). Auch hier wurde auf beiden Tumblr-Konten ein wenig keywordbezogener Text eingefügt. Blog 1 verlinkte direkt auf das Youtube-Video, Blog 2 relinkt das Video von Blog 1.
Ein Tag später rankte das Video unter dem ersten Keyword bereits auf Seite 10 (Verbesserung um zwei Seiten), die Keyword-Kombi von Seite 2 (Platz 2) auf Seite 1 (letzter Platz). Über ein Testkonto likte ich das Video und postete es auch auf Google +.

Ein Tag später verbesserte sich das Video auf Seite 7; in der Keyword-Kombi blieb es auf Platz 1, jedoch auch auf dem letzten Platz. Danach folgte ein Rückschlag: Am Tag darauf viel das Ranking um drei Seiten. Obwohl keine Tätigkeiten erfolgten, zeigte die Suche das Video nur noch auf Seite 9. Ein Tag darauf verbesserte sich das Ranking wieder um eine Seite auf Seite 8 (Platz 9). In der Keyword-Kombi verbesserte sich das Ranking auf der ersten Seite vom letzten auf Platz 13, was eine Verbesserung um 7 Plätze bedeutet.

Ein paar Tage später dann ein herber Rückschlag. Plötzlich ist das Video unter dem Hauptkeyword nur noch auf Seite 10 zu finden. Auch in der Kombi hab es Rückschläge. Zwar ist das Video immer noch auf Seite 1 zu finden und das Abrutschen um einen Platz zu verkraften, zeigt es aber, dass auch auf Youtube das Ranking sehr volatil ist.

Test 3: Gekaufte Abonnenten zum Stadtteilvideo

Wie die bisherigen Tests gezeigt haben, haben die Videos durch das Abonnieren des Kanals sowie durch die Einbindung in externe Seiten (hier: Expired Tumblr-Blogs) durchaus deutliche Rankingsprünge nach oben verzeichnet. Da ich aktuell (noch) nicht genug weitere Youtube-Konten besitze, habe ich 1 USD ausgegeben und bei einer dubiosen thailändischen Freelancerin zehn Subscripes, 15 Likes und 20 Comments gekauft. Hier habe ich absichtlich nur so wenige gewählt, da es sehr auffällig ist, wenn der Youtube-Kanal plötzlich von 2 auf 1002 Abonnenten anwächst und gleichzeitig unzählige englischsprachige Kommentare erhält. Auch wurde das Ziel, das Feuerwerk-Stadtteilvideo, mit Bedacht gewählt, denn sollte sich dieser Test als Fehler erweisen (und das Video von Youtube gebannt werden), kann hier kein Schaden entstehen.

  • Tag 1: Unter dem Keyword „Stadtteilname“ ist das Video, wie am Vortag, auf Platz 9 (Seite 1) zu finden
  • Tag 2: Das Video ist heute um einen Platz auf Platz 8 vorgerückt.
  • Tag 5: Das Video hat sich inzwischen um zwei Plätze auf Platz 6 verbessert.
  • Auch zehn Tage später rankt dieses Video prominent auf Platz 6. Es sei jedoch angemerkt, dass zu diesem Keyword nur sporadisch neue Videos bei Youtube hochgeladen werden.

Youtube SEO – wie man das Ranking verbessert – Teil 1 von 3

Youtube ist inzwischen die zweite Suchmaschine im Netz. Nicht ohne Grund hat Google das Portal vor einigen Jahren für viel Geld gekauft. Umso wichtiger, dass man mit Videos für seine Projekte dort vertreten ist. Und ebenso wichtig: Das Ranking der Videos.
In erster Linie sollte man Youtube nicht als Backlinkquelle verstehen. Dieser Link beeinflusst das Google-Ranking nach meinen Erfahrungen nicht wirklich. Doch Youtube bringt Besucher – Besucher auch auf der Money-Site, also der Webseite, über die man Geld verdient. Und umso höher ein Video im Ranking steht, umso eher wird das Video angesehen – eben genauso, wie in den Google-SERPS.

YouTube sortiert seine Videos nicht (nur) anhand der Aufrufen, wie hier eindeutig zu sehen ist.
YouTube sortiert seine Videos nicht (nur) anhand der Aufrufen, wie hier eindeutig zu sehen ist.

Die alles entscheidende Frage ist natürlich, wie Youtube seine Videos innerhalb einer Keyword-Gruppe sortiert. Neben dem Keyword an sich sind Video-Aufrufe, Likes, Kommentare und Kanal-Abos mögliche Rankingfaktoren. Dass die Anzahl der Aufrufe und Linkes nicht alleinige Ranking-Faktoren sein können, zeigt ein einfacher Blick in die Liste, beispielsweise hier mit dem Keyword „essen“. Hier sehen wir, dass Videos mit rund 42.000 Aufrufe vor Videos mit über 1.2 Mio Aufrufen stehen. Dies bedeutet, dass Views und Likes entweder gar nicht, oder nur zum geringen Teil zum Ranking hinzugezogen werden. Letzteres ist wahrscheinlich.
Nicht weiter hinterfragen werde ich hier die Optimierung der Keywords. Es sollte klar sein, dass das wählen von optimalen Keywords im Titel, in der Beschreibung und das Tagging essentiell für die Suche sind. Wenn hier schon Fehler gemacht werden, kann das Video nicht optimal in der Suche auftauchen. Das richtige Keyword ist sicherlich die halbe Miete. Doch was muss noch beachtet werden?

Test 1: Neues Youtube Konto, schwache Keyword-Kombi

An einem lauen Sommerabend im Sommer 2016 (ok, das war wirklich die Ausnahme) konnte ich bei einem Stadtteilfest ein Feuerwerk filmen. Dies und einige Impressionen zusammengeschnitten, ergab eine schönes Feuerwerk-Video. Mein Gedanke war, dass dieses Video in der Keywordkombi „Feuerwerk [Stadtteilname]“ umgehend auf Platz 1 stehen sollte, da dies m.E. eine sehr schwache Kombi ist. Lediglich ein Video, bereits acht Jahre alt, hatte die gleiche Kombi.
Für diesen Test habe ich ein neues Konto registriert, das Video online gestellt, mit optimalen Keywords versehen und war fest davon überzeugt, dass ich dieses Video ein paar Tage später auf Platz 1 sehen würde. Doch weit gefehlt!
Nach ein paar Tagen rankte das Video lediglich auf Platz 70 und bewegte sich nicht nach vorn. Ein Aufruf bei ein paar Freunden, sie mögen einen Kommentar bei dem Video hinterlassen und es auch liken, zeigte erste Bewegungen. Ein paar Tage später nutzte ich Youtube-Testkonten von mir, hinterließ einen Kommentar, Likte und abonnierte auch den Kanal. Dann – und erst dann, kam Fahrt auf.
Kurzum, ein paar Tage später war (und ist) das Video in der Keywordkombi „Feuerwerk [Stadtteilname]“ auf Platz 1. Nur über das Keyword „[Stadtteilname]“, welches durchaus einige Videos zeigt, rückte das Video auf die erste Seite, dort auf dem letzten Platz auf.
Hier zeigte sich also, dass neben den richtigen Keywords es auch sehr wichtig ist, dass der Kanal Abonnenten hat. Somit wird auch klar, dass viele Youtubler so erpicht darauf sind, dass man ihren Kanal abonniert.
Natürlich ist Platz 1 mit der Keyword-Kombi nicht mehr zu toppen. Doch Ziel ist nun, das Video unter dem Stadtteilnamen noch weiter nach vorn zu bringen. Dazu habe ich zwei „expired Tumblr-Konten“ wiederbelebt und auf dem einen Account das Video von Youtube direkt verlinkt. Ein kleiner Artikel über den Stadtteil soll den Keyword-Bezug zum Stadtteil heben. Ein zweiter Tumblr-Blog relinkt das Video aus dem ersten Blog. Auch hier ist ein kurzer Artikel über den Stadtteil vorhanden. Und siehe da – ein paar Tage später rankt das Video unter dem Stadteilname auf Platz 10.
Es sei angemerkt, dass ich für diesen Test sehr alte Expired Tumblr-Blogs genommen habe, die inzwischen nicht einmal mehr einen Majestics Trust hatten. Auch viele Backlinks zu den Blogs sind inzwischen gelöscht worden (Ref-IPs 74 / 20). Hier ging es einfach nur darum zu erkennen, ob diese einfache Methode das Ranking ebenfalls positiv beeinflusst.

Erklärung: Was sind expired Tumblr-Blogs?

Seit einigen Jahren gelten „Expired Domains“ als DIE SEO-Geheimwaffe. Dabei handelt es sich um Domains, die vom Inhaber aufgegeben wurden. Ein neuer Besitzer registriert die Domain, verlinkt damit seine Moneysite und partizipiert von der Stärke der Domain. Stärke? Nun, die Seite sollte über viele (gute) Backlinks verfügen, also Links, die ursprünglich natürlich entstanden sind und nicht gelöscht wurden, obwohl die Seite nicht mehr existent ist bzw. war. Auf diesem Wissend aufbauend hat sich der Begriff PBN („Private Blog Network“) entwickelt; was nichts anderes bedeutet, dass man selbst ein eigenes (privates) Netz aus vielen solchen „expired Domains“ sich aufbauen (und pflegen) sollte. Hintergrund: Die Mutter aller Suchmaschinen wurde in der Vergangenheit immer besser dabei, solche „wiederbelebte“ Seiten zu erkennen (und abzustrafen), die nur dazu dienen, eine Moneysite zu stärken. Doch auch wenn man ein solches Netzwerk für sich selbst betreibt, kann man viele Fehler machen. Zumal auch der Unterhalt und die Pflege der vielen Seiten Zeit und Geld verschlingt.

Das Blognetzwerk „Tumblr“ genießt nach wie vor einen guten Ruf (warum, ist mir eigentlich unklar). Schon vor Jahren galt es als ein Muss, Links von Tumblr, Blogspot etc. zu generieren. Also eine Seite zu registrieren, ein wenig Text mit einem Link zur Moneysite veröffentlichen und sich über den Backlink freuen. Dann hat man auch dafür gesorgt, dass diese Blog-Seite (auch „Satelliten-Seite“ genannt) mit minderwertigen automatisch generierten Links (Stichwort: GSA) zu versorgen. Hat alles einmal dafür gesorgt, dass das Ranking der Moneysite stieg. Heute würde ich davon komplett die Finger lassen.

Dennoch sind „expired Tumblr-Blogs“ eine nette Sache. Denn wenn man eine Seite findet, die natürliche Backlinks hat, kann man diese durchaus nutzen. Ob man daraus einen Link für seine Moneysite generiert (gefährlich), oder damit andere Satelliten-Seiten „füttert“ – das muss jeder selbst wissen. Ich nutze aktuell diese Seiten zum Puschen von Youtube-Videos.

Wie entstehen „expired Tumblr-Blogs“?

Tumblr ist sehr aktiv beim Löschen von „verwaisten“ Blogs. Wenn ein Nutzer sich eine bestimmte Zeit (ein Jahr?) nicht mehr einloggt und das Konto nicht mehr nutzt, schickt Tumblr eine Mail. Wenn darauf nicht reagiert wird, wird das Konto gelöscht. Eine bestimmte Zeit kann das Konto vom rechtmäßigen Inhaber wohl noch „wiederbelebt“ werden (selbst nicht getestet), doch dann – irgendwann – kann es neu registriert werden. Und das ist der Zeitpunkt, an dem man das Konto (kostenfrei) registrieren sollte.

Welche Konten sollte man registrieren?

Es lohnen sich natürlich nur Konten, die über Backlinks verfügen. Ob 10, 20 oder 30 Links aus unterschiedlichen IP-Kreisen das Minimum sind – das muss jeder selbst wissen. Ob der Majestics TrustFlow eine entscheidende Rolle spielt? Viele sagen JA. Andere sehen das nicht so eng.

Ich persönlich betrachte Konten ab 20 Ref-IPs und einem TrustFlow ab 10 – das sehe ich als Kriterium an, die Seite mir näher zu analysieren. Das Backlink-Profil ist bei diesen Seiten oft sehr einseitig. Dass ein Großteil der Links im Anker den Blognamen haben, sehe ich bei Tumblr-Blogs nicht als Problem an. Viel wichtiger ist ein Blick auf die Backlinks – hier trennt sich die Spreu vom Weizen.

HowTo: Zweite FritzBox als „IP-Client“ einrichten

Im ersten Teil dieses Artikels („Mit zweiter Fritzbox WLAN Reichweite erhöhen„) habe ich erklärt, warum man vielleicht eine zweite FritzBox in einem LAN installieren möchte. Im vorliegenden Fall soll mit einer zweiten FritzBox WLAN zur Verfügung gestellt werden.

Die Schritte im Einzelnen:

  1. „Erweiterte Ansicht“ aktivieren
  2. Die Fritz Box als „IP-Client“ definieren. Dadurch versucht die Box nicht mehr, sich selbstständig einzuwählen. Hierzu wählt man die Kategorie „Internet“, „Zugangsdaten“. Dann die Aufklappliste „Internetanbieter“ und den Eintrag „Andere Internetanbieter“. Im Abschnitt „Anschluss“ nun die Option „Externes Modem oder Router“ und als „Betriebsart“ die Option „Vorhandene Internetverbindung mitbenutzen (IP-Client Modus)“ wählen. In den Eingabefeldern „Downstream“ und „Upstream“ soll die Geschwindigkeit des Internetzuganges eingetragen werden, damit die Priorisierung der Pakete ordnungsgemäß klappt. Bei einem Downstream von 32 Mbit/s wird in der Box „32000“, bei einem Upstream von 2 Mbit/s wird „2000“ eingetragen. Über speedtest.t-online.de kann beispielsweise der Zugang getestet werden.
  3. Nun auf „Verbindungseinstellungen ändern“ klicken.
  4. Nun muss verhindert werden, dass die zweite Fritz-Box selbst auch als DHCP-Client fungiert.  Ob die zweite FritzBox eine statische oder dynamische IP-Adresse von der ersten FritzBox erhalten soll, ist Geschmackssache. Ich persönlich habe der zweiten FritzBox eine  statische IP-Adresse vergeben. Hierfür NICHT die Option „IP-Adresse automatisch über DHCP beziehen“ wählen, sondern „IP-Adresse manuell festlegen“. In diesem Fall muss eine freie IP-Adresse, Subnetzmaske, Standard-Gateway sowie der Primäre DNS-Server“ eingegeben werden.
  5. Nun den Button „Übernehmen“ wählen.

FRITZ!Box ‎IP-Client
Hier die veraltete Oberfläche einer FritzBox. Wichtig ist die Einstellung als IP-Client, damit die zweite FritzBox nicht versucht, sich ins Internet zu verbinden.

Die FritzBox wird sich nun neu starten und steht unter statischen IP-Adresse bereit. Wenn man DHCP gewählt hat, sollte man spätestens jetzt die zweite Fritzbox ins LAN integrieren und über die zugewiesene IP-Adresse auf die FritzBox zugreifen.

Anschluss der zweiten FritzBox

Die zweite FritzBox wird nach diesen Vorbereitungen lediglich mit einem LAN-Kabel vom Switch (Anschluss an der FritzBox: LAN1) versorgt. Weitere Kabel oder Anschlüsse sind – ausgenommen natürlich der Stromanschluss – nicht notwendig.

WLAN aktivieren

Wenn man, wie in meinem Fall, das WLAN der ersten FritzBox deaktiviert, muss man lediglich in der zweiten FritzBox WLAN aktivieren. Mehr ist nicht zu unternehmen. Wenn Sie zwei WLAN-Accesspoint gleichzeitig nutzen wollen, müssen Sie LAN-Roaming aktivieren.

WLAN-Roaming aktivieren

  1. Wählen Sie in der Verwaltungsoberfläche der zweiten FritzBox „WLAN“ und dann auf „Funknetz“.
  2. Tragen Sie dort die SSID Ihres ersten AccessPoint in die Box „Name des WLAN-Funknetzes (SSID)“ ein und klicken Sie auf „Übernehmen“.
  3. Wählen Sie im Menü „WLAN“ „Funkkanal“. Aktivieren Sie im Abschnitt „Funkkanal-Einstellungen“ die Option „Funkkanal-Einstellungen anpassen“. Geben Sie dort das verwendete WLAN-Frequenzband Ihres ersten Routers (dort nachschauen) ein und wählen Sie „übernehmen“.
  4. Klicken Sie im Menü „WLAN“ auf „Sicherheit“
  5. Aktivieren Sie die gleiche Sicherheitsstufe, wie in der ersten FritzBox verwendet.
  6. Übernehmen Sie den WLAN-Netzwerkschlüssel von der ersten FritzBox auch in der zweiten FritzBox und wählen Sie „übernehmen“.

Bei dieser Option ist es notwendig, dass die WLAN-Einstellungen wie Sicherheit und Netzwerkschlüssel identisch sind. Nur so kann ein WLAN-fähiges Gerät sich von der ersten FritzBox problemlos auch in der zweiten FritzBox einwählen.

FritzBox: WLAN abschalten

Am sichersten ist natürlich ein WLAN, wenn es ausgeschaltet ist. Da in meinem Fall nur die zweite, also zusätzliche, FritzBox WLAN überträgt, muss diese nur mit Strom versorgt werden, wenn ich WLAN senden möchte. Stecker rein – und nach 10 Sekunden ist WLAN verfügbar. Stecker raus – WLAN aus und Strom gespart. Umständliches hantieren über die Weboberfläche der FritzBox kann man sich so sparen.

Mit zweiter Fritzbox WLAN Reichweite erhöhen

Von Haus aus bringt die Fritz!Box meist die Möglichkeit mit, einen WLAN AccessPoint einzurichten, also ein WLAN in einer Wohnung oder in einem Haus zur Verfügung zu stellen. Dies ist schnell administriert und arbeitet auch – sofern man bei WLAN überhaupt von sicher sprechen kann – stabil und sicher. Eben so sicher, wie das verwendete Passwort und die Verschlüsselungsart es hergeben.

Je nach räumlicher Situation kann es jedoch sein, dass das von der FritzBox gesendete WLAN Signal am Arbeitsplatz, Wohn- oder Kinderzimmer nicht mehr ausreichend zur Verfügung steht. Nicht selten fristet die FritzBox im Keller ihr Dasein, aber in den oberen Stockwerken wird das WLAN-Signal gebraucht. Nun kann man das WLAN-Signal mit WLAN-Repeatern verstärken, was in vielen Fällen eine gute Lösung ist. Dies bedingt aber, dass am Rande des WLAN-Signals auch eine Steckdose für den Repeater vorhanden sein muss. Und nicht selten sind nicht nur ein, sondern mehrere Repeater notwendig, um am gewünschten Zielort ein vernünftiges WLAN-Signal zur Verfügung zu stellen.

Zweite Fritzbox gebraucht bei eBay kaufen
Zweite FritzBox gebraucht bei eBay kaufen

Im folgenden Fall sieht es so aus, dass die FritzBox im Keller angeschlossen ist und ein LAN durch das ganze Haus führt. Im Keller könnte sogar gänzlich auf WLAN verzichtet werden. Lediglich im Obergeschoss soll WLAN – hier aber mit ausreichender Stärke – zur Verfügung stehen. Die Lösung liegt auf der Hand: Auf die WLAN-Funktion der FritzBox verzichten und im Obergeschoss einen separaten WLAN-Access-Point einrichten, der seine Anbindung per LAN erhält. Nach einigem gogglen und diversen Gesprächen mit Kollegen war klar, dass solche Geräte ab 20 Euro angeboten werden und in dieser Preisklasse alles andere als stabil arbeiten. Schnell kam die Idee auf, eine alte FritzBox dafür zu verwenden. Dank eines ISP-Wechsels stellte mir der neue Provider eine neue FritzBox zur Verfügung. Die alte FritzBox verstaubte im Keller. Wer keine zweite FritzBox herumliegen hat, kann sich auch bei ebay danach umschauen. Für wenige Euro wechseln diese den Besitzer. Auch „gebrandete“ Boxen, meist von anderen Käufern verschmäht, sind hier sehr günstig zu erwerben.

Eine neue FritzBox für diesen Anwendungsfall kaufen? Auf keinen Fall. Die FritzBox steht zwar für Qualität, doch selbst die günstigste FritzBox kostet neu deutlich mehr, als WLAN-Access-Points aus fernöstlicher Produktion.

Darauf sollte man bei der Suche nach einer zweiten FritzBox achten:

Ich würde – sofern keine zweite Fritzbox herumliegt – mich in Kleinanzeigenmärkten oder eben bei ebay umschauen. Diese wechseln zum Teil für einstellige Eurobeträge den Besitzer. Vor allem, wenn Zubehör fehlt (was man vielleicht auch nicht benötigt). Wie welche Fritz-Box ausgestattet ist, also ob sie WLAN zur Verfügung stellt, welche Geschwindigkeit etc, kann kann bei Router-FAQ nachlesen.

Wie man eine zweite FritzBox im LAN einrichtet und WLAN einrichtet

Um eine zweite FritzBox in ein bestehendes LAN einzurichten, benötigt man nur drei Dinge: Die FritzBox, ein LAN-Anschluss und Strom in Form einer Steckdose. Zuerst sollte man die neue/alte FritzBox direkt an einen Laptop etc anschließen und sich darauf verbinden. Daran denken, dass man in der Oberfläche sofort in den Experten-Modus („Erweiterte Ansicht“) wechseln muss, damit man in der Oberfläche auch alle Einstellungsmöglichkeiten erkennen kann.

Zum HowTo: Zweite FritzBox als „IP-Client“ einrichten