Der Japanese Keyword Hack (auch “Japanese SEO Spam”) ist ein Angriff, bei dem eine Website so manipuliert wird, dass Google plötzlich Spam-Seiten bzw. Spam-Inhalte indexiert (oft mit japanischen Keywords – je nach Variante aber auch andere Sprachen/Shop-Spam). Das Gemeine daran: Häufig läuft das als Cloaking ab. Heißt: Normale Besucher sehen die echte Website, aber Bots wie Googlebot bekommen anderen Inhalt (Spam, Redirects, Fake-Shop-HTML usw.).
Schnellster Test, ob du betroffen bist:
Öffne eine beliebige Seite deiner Website und frage Gemini: „Kannst du dir diese Seite kurz ansehen – was siehst du?“ Vergleiche die Antwort mit dem Inhalt, den du selbst im Browser siehst. Gemini ruft Seiten oft ähnlich wie ein Bot (z.B. Google) ab – wenn Gemini deutlich andere Inhalte sieht (Spam, fremde Texte/Links, andere Titel), dann ist das ein sehr starker Hinweis auf Cloaking/Japanese Keyword Hack und du hast ein ernstes Problem.
Typische Anzeichen
- In Google tauchen plötzlich komische Ergebnisse auf (z.B.
site:domain.tld) mit Keywords/Seiten, die du im Browser nicht findest. - In der Search Console oder beim Test mit Googlebot sieht die Seite anders aus als für echte Besucher.
- Im Quellcode finden sich Spam-Marker, fremde Domains, komische JavaScript-Snippets oder versteckte Redirects.
Wo kann der Hack “stecken”?
Der Fehler sitzt nicht immer nur in WordPress selbst – oft ist der eigentliche Trigger serverseitig:
1) WordPress (klassisch)
- infizierte Plugins/Themes
- PHP-Dateien in
wp-content/uploads/ - Datenbank-Injektionen (versteckte Links/JS, Base64, eval/gzinflate)
2) Nginx/Apache (Webserver)
- manipulierte vHost-Konfigurationen (Bot-Erkennung, Redirects, spezielle Locations)
- zusätzliche Serverblöcke (z.B. interne Ports), die dann in PHP-FPM laufen
3) PHP-FPM / php.ini (besonders gefährlich)
Ein sehr beliebter Malware-Trick ist auto_prepend_file in PHP.
Wichtig: auto_prepend_file wird vor jedem PHP-Request ausgeführt. Das ist perfekt, um Spam/Redirects nur an Bots auszuspielen – auch wenn WordPress-Dateien “sauber” aussehen.
So haben wir es damals gefunden
Bei uns war der entscheidende Hinweis:
✅ Der Spam kam aus dem Nginx-Serverblock auf Port 8080
und bei einer Webseite lag das konkret in:/etc/nginx/sites-enabled/www.domain.ch.conf (ab ca. Zeile ~130)
Der nächste Schritt war der Blick in den 8080-Serverblock. Der sah auf den ersten Blick normal aus, kein komisches if für Bots und keine offensichtlichen Redirects. Damit war klar:
➡️ Der Spam kommt nicht direkt aus Nginx, sondern aus PHP über:fastcgi_pass 127.0.0.1:17002 (PHP-FPM / Prepend / Pool)
Und genau dort war der Treffer:
In /etc/php/8.2/fpm/php.ini war gesetzt:auto_prepend_file="data:;base64,PD9waHAKZXZhbChnemluZmxhdGUoYmFzZTY0X2RlY29kZShzdHJfcm90MTMo..."
Das ist kein Wordfence und keine legitime Einstellung, das ist ein klassischer Malware-Mechanismus (Base64 + gzinflate + rot13/eval-Kette), der vor jedem PHP-Request läuft und dadurch z.B. nur für Googlebot Spam-HTML ausliefern kann. Genau so entsteht dieses “Bots sehen Spam, Menschen sehen normal”.
Was wir gemacht haben (Fix in kurz)
php.inigesichertauto_prepend_file(und vorsorglichauto_append_file) geleertphp8.2-fpmneu gestartet + Nginx reload- Verifikation: Seite einmal normal laden und einmal mit Googlebot-User-Agent testen und nach Spam-Markern suchen
Ergebnis: Googlebot und normale User bekommen wieder denselben, sauberen Inhalt.
Wichtig!
Beim Japanese Keyword Hack reicht es nicht, nur WordPress zu scannen.
Wenn auto_prepend_file (oder ähnliche Prepend-Mechanismen) auf Serverebene missbraucht wird, kann die Malware unsichtbar bleiben und trotzdem Google massiv mit Spam füttern.
✅ MAC (Terminal)
1) Googlebot-Test (zeigt: was Google sieht)
Kopieren, einfügen, Enter:
URL="HIER_URL_EINFÜGEN"
echo "=== GOOGLEBOT (was Google sieht) ==="
curl -sL --compressed -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "$URL" | head -n 60
2) Vergleich: Normal vs. Googlebot (Titel checken)
Kopieren, einfügen, Enter:
URL="HIER_URL_EINFÜGEN"
echo "=== NORMAL (Browser) TITLE ==="
curl -sL --compressed -A "Mozilla/5.0" "$URL" | grep -i "<title" | head -n 1
echo
echo "=== GOOGLEBOT TITLE ==="
curl -sL --compressed -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "$URL" | grep -i "<title" | head -n 1
3) Schnell-Scan nach typischen Spam-Markern (automatisch)
Kopieren, einfügen, Enter:
URL="HIER_URL_EINFÜGEN"
echo "=== GOOGLEBOT Spam-Scan ==="
curl -sL --compressed -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "$URL" \
| grep -Ein "yimg\.jp|yjDataLayer|komeri\.com|Ferricelli|Bota Masculina|日本|激安|コピー|ブランド|sale|discount" \
| head -n 30
➡️ Wenn hier Zeilen ausgegeben werden (Treffer), ist das sehr verdächtig.
✅ WINDOWS (PowerShell)
Wichtig: In Windows bitte PowerShell verwenden (nicht “CMD”).
Startmenü → “PowerShell” → öffnen.
1) Googlebot-Test (was Google sieht)
Kopieren, einfügen, Enter:
$URL="HIER_URL_EINFÜGEN"
"=== GOOGLEBOT (was Google sieht) ==="
curl.exe -sL --compressed -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" $URL | Select-Object -First 60
2) Vergleich: Normal vs. Googlebot (Titel checken)
Kopieren, einfügen, Enter:
$URL="HIER_URL_EINFÜGEN"
"=== NORMAL (Browser) TITLE ==="
curl.exe -sL --compressed -A "Mozilla/5.0" $URL | Select-String -Pattern "<title" | Select-Object -First 1
"=== GOOGLEBOT TITLE ==="
curl.exe -sL --compressed -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" $URL | Select-String -Pattern "<title" | Select-Object -First 1
3) Schnell-Scan nach typischen Spam-Markern (automatisch)
Kopieren, einfügen, Enter:
$URL="HIER_URL_EINFÜGEN"
"=== GOOGLEBOT Spam-Scan ==="
curl.exe -sL --compressed -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" $URL `
| Select-String -Pattern "yimg\.jp|yjDataLayer|komeri\.com|Ferricelli|Bota Masculina|日本|激安|コピー|ブランド|sale|discount" `
| Select-Object -First 30
➡️ Wenn Treffer angezeigt werden, ist das stark verdächtig.
🚨 Was gilt als “Problem”?
Du hast sehr wahrscheinlich ein Problem, wenn:
der <title> bei Googlebot deutlich anders ist (Spam-Keywords)
Googlebot anderen Inhalt sieht als normaler Browser
im Googlebot-Output tauchen Begriffe/Domains auf wie z.B. yimg.jp, komeri.com, japanische Wörter, “sale/discount”, etc.
Solltest du massive Probleme haben melde dich direkt bei uns. Trage im Betreff NOTFALL ein. Wir melden uns.
Was passiert danach? (wenn der Fehler identifiziert ist)
Sobald du bestätigt hast, dass Googlebot anderen Inhalt sieht (Cloaking / Japanese Keyword Hack), kommt der wichtigste Teil:
1) Muster erkennen (die Spam-URLs folgen fast immer einem Schema)
Diese Hacks erzeugen nicht “zufällige einzelne Seiten”, sondern tausende URLs nach einem Muster, z.B.:
- immer gleiche Pfade/Ordner
- oder gleiche Query-Parameter wie
?cc=12345,?shop=9999,?store=8888usw. - oft sind es lange Zahlen oder automatisch erzeugte Tokens
👉 Ziel: Du blockst nicht nur eine URL, sondern das Muster.
2) Wichtig: Spam-URLs müssen HTTP 410 Gone liefern
Warum 410?
- Google hat die URLs bereits gecrawlt → deshalb findest du sie überhaupt in der Suche.
- Wenn du Google sauber signalisierst: “Diese URL gibt es nicht mehr – komm nie wieder”, ist 410 das stärkste Signal dafür.
✅ 410 = “dauerhaft entfernt”
(404 geht auch, aber 410 ist klarer/“härter”.)
3) 410 im Vhost setzen (Nginx Beispiel)
Den 410 setzt du im Vhost (Serverblock) – hier ein Beispiel, wenn der Hack über Query-Parameter läuft:
# --- SPAM: Query-Parameter (lange Zahlen) ---
if ($arg_cc ~* "^[0-9]{4,}") { return 410; }
if ($arg_dd ~* "^[0-9]{4,}") { return 410; }
if ($arg_ff ~* "^[0-9]{4,}") { return 410; }
if ($arg_gg ~* "^[0-9]{4,}") { return 410; }
if ($arg_mall ~* "^[0-9]{4,}") { return 410; }
if ($arg_online ~* "^[0-9]{4,}") { return 410; }
if ($arg_store ~* "^[0-9]{4,}") { return 410; }
if ($arg_shop ~* "^[0-9]{4,}") { return 410; }
# --- Ende ---
Bedeutung: Sobald ein Bot mit so einer Spam-URL kommt, sagst du:
➡️ “Diese URL existiert nicht mehr. Komm nie wieder.”
4) Nächster Schritt: Google Search Console → Entfernen
Wenn die Regeln aktiv sind:
- In die Google Search Console
- Links auf “Entfernen”
- Dort die Spam-URLs (oder Verzeichnisse/Prefix, wenn möglich) entfernen
⚠️ Wichtig: Das Entfernen gilt nur ca. 6 Monate.
In dieser Zeit crawlt Google die URLs erneut – und sieht dann 410 → dadurch werden sie dauerhaft rausfallen.
5) Beobachte deine Sitemaps (die nächsten 1–2 Tage)
Das ist extrem spannend und ein guter Indikator:
- Du öffnest deine Sitemap im Browser → sieht “normal” aus
- Google liest sie → plötzlich sind tausende Spam-URLs drin (oder Google meldet komische URLs)
✅ Sobald der Hack wirklich raus ist, stabilisiert sich das wieder.
👉 Darum: Sitemaps 1–2 Tage im Blick behalten (und Search Console “Sitemaps”-Report prüfen).