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)

  1. php.ini gesichert
  2. auto_prepend_file (und vorsorglich auto_append_file) geleert
  3. php8.2-fpm neu gestartet + Nginx reload
  4. 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.

kontakt@arion-consulting.ch

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=8888 usw.
  • 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:

  1. In die Google Search Console
  2. Links auf “Entfernen”
  3. 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).