Skip to main content

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)

MetricWhat it feels likeCommon 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
tip

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 itemTargetWhy it matters
Third-party scripts0-2 on key landing pagesThird-party JS is a frequent INP killer
Font families1-2Fonts affect LCP and CLS
Total hero mediaKeep it small and responsiveThe hero is often the LCP element
Layout shifts0 unexpected shiftsCLS is mostly avoidable with reserved space
note

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.

List active plugins (baseline audit)
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.

Spot plugin asset URLs in HTML
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

  1. Pick one page you care about (home, a money page, or a top blog post).
  2. Check what scripts/styles are loaded.
  3. Remove or delay one non-critical script (chat widget, analytics add-on, slider).

From a server you can at least see script tags:

List script and stylesheet URLs from a page
PAGE_URL="https://example.com/"
curl -sL "$PAGE_URL" | rg -n "<(script|link)[^>]+(src|href)=\"" | sed -n '1,200p'
caution

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.

Child theme: optional cleanup (emojis and embeds)
<?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' );
tip

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

SymptomLikely causeFix
CLS spikes on loadImages/ads injected lateAdd dimensions; reserve space for banners
LCP is the logo/fontFont loading strategyReduce weights; self-host; preload primary font
INP poor on simple pagesThird-party JSRemove/replace; load on interaction only
Mobile score much lowerHeavy hero + large imagesServe responsive images; simplify above-the-fold

Hands-On: Establish a Baseline and Track It

  1. Pick two pages: one marketing page and one content page.
  2. Record current LCP/INP/CLS results.
  3. Remove one plugin/script from the marketing page.
  4. Re-test and keep a small changelog.
Capture HTML snapshots for before/after comparisons
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