Performance-SEO Link
Performance is an SEO input because it changes what users do (bounce, engagement) and what Google measures (Core Web Vitals). GeneratePress is a performance-oriented theme, but your choices (fonts, images, blocks, scripts) determine the result.
What Google Measures (Practical View)
| Metric | What it feels like | Common causes in WP themes |
|---|---|---|
| LCP | "Can I see the main thing yet?" | Huge hero images, slow fonts, render-blocking CSS |
| INP | "Does the page respond when I click?" | Too much JS, heavy sliders, third-party scripts |
| CLS | "Why did the layout jump?" | Images without dimensions, late-loading fonts, injected banners |
GeneratePress helps most with INP because it does not require heavy JS. Protect that advantage by being selective with plugins and third-party embeds.
GeneratePress Levers That Move the Needle
Disable what you do not need
On pages where you want a clean landing experience:
- Disable titles, featured images, or sidebars if they do not support the goal
- Remove unnecessary widgets and footer columns
- Keep templates consistent so CSS and layout calculations are predictable
Keep layouts composable (GenerateBlocks > page builders)
If you are building advanced pages, prefer blocks and reusable patterns over heavy builders when possible.
Control fonts intentionally
Fonts can harm LCP and CLS:
- Use fewer families/weights
- Preload the primary font file if self-hosting
- Avoid swapping fonts late
Size images correctly (and reserve space)
Always ensure images have dimensions so the browser can reserve layout space.
Set a Performance Budget (So Decisions Are Easier)
Without a budget, every feature request becomes "maybe". With a budget, you can say "yes" or "no" quickly.
| Budget item | Target | Why it matters |
|---|---|---|
| Third-party scripts | 0-2 on key landing pages | Third-party JS is a frequent INP killer |
| Font families | 1-2 | Fonts affect LCP and CLS |
| Total hero media | Keep it small and responsive | The hero is often the LCP element |
| Layout shifts | 0 unexpected shifts | CLS is mostly avoidable with reserved space |
Budgets are different for different pages. A checkout page can justify more scripts than a marketing landing page.
Plugin and Script Audit (Fast Checks)
Start by knowing what is active.
cd /var/www/example.com/public_html
wp plugin list --status=active
Then identify which plugins add frontend assets. The simplest method is still: view source and search for plugin paths.
PAGE_URL="https://example.com/"
curl -sL "$PAGE_URL" | rg -n "wp-content/(plugins|themes)/" | sed -n '1,200p'
A Simple Performance QA Loop
flowchart TD
A[Pick a target page] --> B[Run Lighthouse / PageSpeed]
B --> C[Identify top bottleneck]
C --> D[Change one thing]
D --> E[Re-test]
E -->|Improved| F[Document baseline]
E -->|No change| C
Hands-On: Find and Remove a Render-Blocking Script
- Pick one page you care about (home, a money page, or a top blog post).
- Check what scripts/styles are loaded.
- Remove or delay one non-critical script (chat widget, analytics add-on, slider).
From a server you can at least see script tags:
PAGE_URL="https://example.com/"
curl -sL "$PAGE_URL" | rg -n "<(script|link)[^>]+(src|href)=\"" | sed -n '1,200p'
Do not blindly defer everything. Some scripts are required for navigation, accessibility, or commerce flows. Prioritize third-party scripts first.
Theme-Level Cleanups (When You Own the Code)
If you use a child theme, you can disable a few WordPress defaults that sometimes add extra requests. These are optional and context-dependent.
<?php
// Disable emoji scripts/styles.
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
// Disable oEmbed discovery links.
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
Make one change at a time and re-test. Performance work is measurement-driven; otherwise it becomes guesswork.
Images: The Most Common LCP Fix
If your LCP element is an image (often the hero), improve it first:
- Serve a responsive size (not a full-resolution upload)
- Prefer modern formats when possible
- Avoid CSS background images for critical hero content (harder to optimize)
- Ensure width/height is set (prevents CLS)
Best Practices
- Keep hero sections lightweight; avoid oversized background videos
- Use modern image formats and correct sizes (and lazy-load below the fold)
- Treat third-party scripts as a budget item: each one must justify its cost
- Prefer reusable, consistent layout components (Elements/Blocks) over per-page hacks
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| CLS spikes on load | Images/ads injected late | Add dimensions; reserve space for banners |
| LCP is the logo/font | Font loading strategy | Reduce weights; self-host; preload primary font |
| INP poor on simple pages | Third-party JS | Remove/replace; load on interaction only |
| Mobile score much lower | Heavy hero + large images | Serve responsive images; simplify above-the-fold |
Hands-On: Establish a Baseline and Track It
- Pick two pages: one marketing page and one content page.
- Record current LCP/INP/CLS results.
- Remove one plugin/script from the marketing page.
- Re-test and keep a small changelog.
curl -sL "https://example.com/" > /tmp/home.before.html
curl -sL "https://example.com/blog/" > /tmp/blog.before.html
Quick Reference
- LCP: hero image + font strategy
- CLS: reserved space for media and UI
- INP: reduce JS + third-party scripts
What's Next
- Next: SEO Tools Compatibility