Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unsichtbare Fehler - Kuriositäten aus 20 Jahren...

Unsichtbare Fehler - Kuriositäten aus 20 Jahren WordPress

WordPress ist leicht zu lernen und schwer zu meistern. Nach der 5-Minuten-Installation (womöglich noch kürzer per 1-Klick-Installation) ist alles abstrahiert und kann im Interface eingestellt und bearbeitet werden. Was nicht zu sehen ist, ist auch nicht wichtig.

„Decision, not options.“ – getreu der WordPress-Philosophie.

Aber leider gilt auch „Aus den Augen, aus dem Sinn.“ Es gibt etliche Stellen in WordPress, die leicht vergessen werden können, weil sie nicht direkt zu sehen sind.

Probleme kann es geben mit der .htaccess, Sitemaps, robots.txt, Autoload-Optionen, Favicons und noch vielen mehr.

Ein Talk für alle, die verstehen wollen, was genau passiert – was schiefläuft und wie sie es reparieren können.

Avatar for Torsten Landsiedel

Torsten Landsiedel

May 25, 2025
Tweet

More Decks by Torsten Landsiedel

Other Decks in Programming

Transcript

  1. WordPress Philosophie • Sofort einsatzbereit • Entscheidungen statt Optionen •

    Aufgeräumt, schlank und effektiv • Das Streben nach Einfachheit • Die Fristen sind nicht willkürlich • Die Stimmen-Minderheit https://de.wordpress.org/about/philosophy/
  2. WordPress Philosophie • Sofort einsatzbereit • Entscheidungen statt Optionen •

    Aufgeräumt, schlank und effektiv • Das Streben nach Einfachheit (80/20-Regel) • Die Fristen sind nicht willkürlich • Die Stimmen-Minderheit https://de.wordpress.org/about/philosophy/
  3. • Fehlt das Website-Icon wird das WP-Logo benutzt (ab WP

    5.4) • Ist im Root-Verzeichnis noch eine statische favicon.ico? • Veraltete Plugin/Theme-Lösung noch im Einsatz? Favicon eingerichtet?
  4. • Sollte auf Europe/Berlin stehen • Vor vielen Jahren war

    das noch nicht Standard • One-Click-Installationen nutzen manchmal US-Version als Basis ◦ IONOS 🙄 Zeitzone korrekt?
  5. • Generell Demo-Inhalte (von Themes/Plugins/Templates) • Anhangseiten nicht auf Medien

    geleitet • Kommentare offen (aber nicht genutzt) ◦ Akismet an, aber keinen Key installiert • Gravatar an (ohne Kommentare oder ohne Avatar Privacy) • Suchmaschinen ausgesperrt • Almost Pretty Permalinks (mit index.php in URL) Was gibt es noch für Standardfehler?
  6. • Sie-Version ohne Preferred Languages oder Language Fallback • Mehr

    als 1 Standardtheme • Hello Dolly / Akismet nicht gelöscht • 404 Seite oder andere unverlinkte Standardlinks nicht korrekt (Styling oder Inhalt) • Theme / Plugin direkt verändert Was gibt es noch für Standardfehler?
  7. • Achtung: Homepage berücksichtigt Einstellung! • Immer auf Unterseite testen

    • Problemhoster: IONOS, Domainfactory, … • 301 Redirect von http zu https SSL-Redirect?
  8. # Redirect from http to https <IfModule mod_rewrite.c> RewriteEngine On

    RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule> SSL-Redirect?
  9. • Warnung im Health Check (Website-Zustand) und im Dashboard •

    Aktuell bei PHP <7.4 • Obwohl minimal notwendig bei PHP 7.2.24 PHP-Version aktuell?
  10. • Warnung via Website Zustand • Debugging mit “AAA Option

    Optimizer” https://wordpress.org/plugins/aaa-option-optimizer/ Autoload bei Optionen
  11. _transient_dirsize_cache • Je mehr Ordner/Dateien vorhanden, desto größer • Kann

    schnell mehrere MB haben • Wird bei Autoload=yes bei jeden Request geladen! • Nicht retroaktiv gefixt - muss manuell gemacht werden https://core.trac.wordpress.org/ticket/54221 Autoload bei Optionen
  12. Hide blocks in RSS feed Inhalte, die CSS erfordern oder

    interaktiv sind, aus dem Feed entfernen. https://github.com/Zodiac1978/hide-in-feed
  13. • Check mit Plugin Report (o.ä.): https://de.wordpress.org/plugins/plugin-report/ • Wordfence oder

    andere Sicherheitsplugins warnen auch Keine Plugin-Updates = alles sicher?
  14. Der HTTP X-XSS-Protection Antwortheader war eine Funktion von Internet Explorer,

    Chrome und Safari, die Seiten am Laden hinderte, wenn reflektierte Cross-Site-Scripting (XSS) Angriffe erkannt wurden. Diese Schutzmaßnahmen sind in modernen Browsern weitgehend überflüssig, wenn Websites eine starke Content-Security-Policy implementieren, die die Verwendung von inline JavaScript ('unsafe-inline') deaktiviert. https://developer.mozilla.org/de/docs/Web/HTTP/Headers/X-XSS-Protection X-XSS-Protection: 1; mode=block
  15. Cache Control > Expires “Note: If there is a Cache-Control

    header with the max-age or s-maxage directive in the response, the Expires header is ignored.” https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Expires https://developer.mozilla.org/de/docs/Web/HTTP/Reference/Headers/Cache-Control Browser-Caching
  16. In WordPress 5.5, a new feature is being introduced that

    adds basic, extensible XML sitemaps functionality into WordPress core. https://make.wordpress.org/core/2020/07/22/new-xml-sitemaps-functionality-in-wordpress-5-5/ Sitemaps
  17. With version 5.5., WordPress will expose a sitemap index at

    /wp-sitemap.xml. This is the main XML file that contains the listing of all the sitemap pages exposed by a WordPress site. The sitemap index can hold a maximum of 50000 sitemaps, and a single sitemap can hold a (filterable) maximum of 2000 entries. Sitemaps
  18. By default, sitemaps are created for all public and publicly

    queryable post types and taxonomies, as well as for author archives and of course the homepage of the site. The robots.txt file exposed by WordPress will reference the sitemap index so that i can be easily discovered by search engines. Sitemaps
  19. “By default, sitemaps are created for all public and publicly

    queryable post types and taxonomies, as well as for author archives and of course the homepage of the site.” Wenn der CPT oder die Taxonomie keine öffentliche Seite hat, können wir zum Ausschließen somit bei der Registrierung 'publicly_queryable' => false, nutzen. Alternativ gibt es dafür auch Filter. Sitemaps
  20. • Viele Hoster beschränken inzwischen die Anzahl Dateien • W3

    Total Cache bietet einen Fallback für Caching ohne Redis, Memcached & Co. • Nachteil: sehr viele Dateien • Nur sinnvoll bei schneller SSD Maximal 250.000 Dateien
  21. Unsichere CrossOrigin Links Viele Tools meckern noch oder fügen es

    hinzu, aber das ist unnötig. WordPress selbst hat das entsprechende “rel”-Attribut wieder entfernt.
  22. noopener bei neuem Fenster/Tab? Links mit target=”_blank” werden von allen

    größeren Browsern seit 2021 implizit mit einem rel=”noopener” versehen. https://caniuse.com/mdn-html_elements_a_implicit_noopener
  23. FTP-Server sind keine Dropbox! • wp-config.php -> wp-config.php.bak AAAAAAAHHHRG! •

    Suche in offenen Directory Listings: ◦ "index of" "gravity forms" ZIP - oops!
  24. define( 'WP_MEMORY_LIMIT', '96M' ); Gilt das überhaupt noch? Hoster verbessern

    Tarife oder du bist umgezogen oder hast ein Upgrade gemacht. Veraltete Konstanten?
  25. COMPRESS_JS, COMPRESS_CSS oder ENFORCE_GZIP im Einsatz? Wird von WordPress gar

    nicht mehr genutzt! https://core.trac.wordpress.org/ticket/44815 (Removal) https://core.trac.wordpress.org/ticket/63017 (Überbleibsel) Veraltete Konstanten?
  26. define( 'SAVEQUERIES', true ); define( 'SCRIPT_DEBUG', true ); define( 'CONCATENATE_SCRIPTS',

    false ); Können alle Performance-Probleme verursachen. Nur beim Debuggen verwenden! Veraltete Konstanten?
  27. Veraltete Konstanten? define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true ); // 5.2+ define( 'WP_DEBUG',

    true ); define( 'WP_DEBUG_DISPLAY', false ); define( 'WP_DEBUG_LOG', true ); Fehler ausgeben sollte deaktiviert sein, Logging nur wenn gebraucht Fatale Fehler abfangen sollte aktiv sein (nur bei Bedarf deaktivieren)
  28. Anstatt: define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true ); E-Mail vom Kunden auf sich

    selbst umbauen: RECOVERY_MODE_EMAIL oder recovery_mode_email-Filter Fun fact: RECOVERY_MODE_EMAIL
  29. • WordPress sucht via MySQL fulltext • HTML-Befehle und Block-Markup

    wird gefunden • Lösungen skalieren schlecht oder sind zu kompliziert • Alternativ: Plugin-Lösungen wie Relevanssi (o.ä.) Interne Suche findet zu viel
  30. Danke! Slack // X (Twitter) // Mastodon // Bluesky //

    WordPress.org // GitHub @zodiac1978