Migrate to RunxBuild and earn up to $50 in hosting credit on your first deposit.

Calculate your savings
unxBuild
Back to Blog Explainer

WordPress Featured Image Size: 1200x630 and Why Your Theme Crops It

Sean

Platform Writer

Aug 13, 2026
8 min read

Upload featured images at 1200×630 and you will be fine for most themes and for social sharing, where that ratio matches what link previews expect. There is no single correct size because WordPress does not display your upload — it generates several cropped versions and the theme picks one by name. So the honest answer is: upload large enough for the biggest registered size, at the aspect ratio your theme crops to.

WordPress Featured Image Size: 1200x630 and Why Your Theme Crops It

Understanding the generation step is what turns “my images look wrong” from a mystery into a two-minute fix, so that is where most of this goes.

Table of contents

What WordPress does with your upload

On upload, WordPress creates multiple resized copies and keeps the original. The defaults are:

  • thumbnail — 150×150, hard cropped to a square
  • medium — max 300×300, proportional
  • medium_large — max 768 wide, proportional
  • large — max 1024×1024, proportional
  • full — your original, untouched

Themes register their own sizes on top of these, which is why a theme can display a wide banner from an image you uploaded as a square.

# Every registered size on this site, including the theme's
wp eval 'print_r(wp_get_registered_image_subsizes());'

Run that first. It tells you the actual dimensions your theme is generating, which is more useful than any general recommendation — including the one in this article’s title.

Which size the theme actually uses

<?php
// In the theme, one of these is being called
the_post_thumbnail('large');
the_post_thumbnail('post-thumbnail');
the_post_thumbnail(array(1200, 630));

// Find it
// grep -rn 'the_post_thumbnail\|get_the_post_thumbnail' wp-content/themes/your-theme/

The size name in that call is what determines how your image is cropped for display. If the theme requests a hard-cropped 800×450 and you upload a portrait photo, WordPress crops from the centre and cuts the top and bottom off — which is usually where the subject’s head was.

Registering your own size, in a child theme’s functions.php:

<?php
add_action('after_setup_theme', function () {
    add_theme_support('post-thumbnails');
    // name, width, height, crop
    add_image_size('card-wide', 1200, 630, true);
    add_image_size('card-tall', 600, 900, true);
});

The fourth argument is the crop flag. false scales proportionally to fit within the box; true crops to exactly those dimensions. true gives predictable layout and loses parts of the image; false preserves the image and gives variable heights.

<?php
// Crop from the top centre instead of the middle -- better for portraits
add_image_size('card-wide', 1200, 630, array('center', 'top'));

Regenerating after a change

This is the step that makes the difference and the one everyone forgets: registering a new size does not affect images already uploaded. Sizes are generated at upload time only.

wp media regenerate --yes

# Just one size, much faster
wp media regenerate --image_size=card-wide --yes

# Only images missing that size
wp media regenerate --only-missing --yes

On a large media library this takes a while and is memory-hungry, so run it during quiet hours. --only-missing is the right flag for a routine top-up.

If a new size looks correct on new posts and wrong on old ones, this is always why.

Social sharing needs its own image

The featured image and the Open Graph image are related but not the same thing, and conflating them is why link previews often look wrong.

<meta property="og:image" content="https://example.com/img/post-1200x630.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta name="twitter:card" content="summary_large_image" />
  • 1200×630 is the widely-supported large-preview size, roughly 1.91:1.
  • Include explicit width and height so the preview renders before the image is fetched.
  • The URL must be absolute and publicly reachable — a URL behind authentication produces a blank preview.
  • Keep the file under about 1MB; some scrapers give up on larger ones.

SEO plugins generate these tags from the featured image, but they use whichever registered size they are configured for. If your theme’s featured size is 800×450, the preview is upscaled and soft. Registering a 1200×630 size specifically for sharing solves it.

Social platforms cache aggressively, so changing the image does not change an existing preview. Each platform has a debug tool that forces a re-scrape — use it rather than concluding the change did not work.

File size, formats, and performance

Dimensions are half the story. A 1200×630 PNG photograph can be 2MB where the JPEG is 150KB, and featured images are usually above the fold on an article page, which makes them the Largest Contentful Paint element.

  • JPEG for photographs. Quality 80–85 is visually indistinguishable from 100 at a fraction of the size.
  • PNG only for images needing transparency or hard-edged graphics.
  • WebP — roughly 25–35% smaller than JPEG at equivalent quality, supported everywhere that matters now.
  • AVIF — smaller still, with support that is good but not yet universal.
<?php
// Raise WordPress's default JPEG quality from 82
add_filter('jpeg_quality', fn() => 85);

// Stop the huge scaling of very large uploads, or change the threshold
add_filter('big_image_size_threshold', fn() => 2560);

WordPress creates a scaled version of any upload over 2560px and serves that as “full”, keeping your original separately. That is sensible default behaviour and occasionally surprising when you were expecting the original.

One thing worth doing regardless of size: the featured image on a post page should load eagerly with explicit dimensions. WordPress adds loading="lazy" to images by default, and lazy-loading the LCP element makes the page measurably slower — the opposite of what the attribute is for.

Trimming what gets generated

Every registered size is generated for every upload. Ten sizes across a thousand images is ten thousand files, most never requested.

<?php
// Remove sizes a theme registered that you do not use
add_filter('intermediate_image_sizes_advanced', function ($sizes) {
    unset($sizes['medium_large'], $sizes['1536x1536'], $sizes['2048x2048']);
    return $sizes;
});

Check what your theme and plugins actually request before removing anything — deleting a size in use means broken or unstyled images across the site.

wp media regenerate --dry-run
wp db size --tables | grep postmeta

Storage adds up quietly. A media library with unused sizes across thousands of images is often the largest thing on the disk, and it is the sort of cost that only becomes visible when you look at a bill and wonder what is using the space.

That is worth knowing before it surprises you rather than after. Where storage and bandwidth are separate line items rather than folded into one plan price — as they are on RunxBuild, with the WordPress ladder starting at $3/month — an oversized media library shows up as a number you can point at and act on.

How this fits the rest of the stack

Upload at 1200×630 as a default, but run wp eval 'print_r(wp_get_registered_image_subsizes());' to find out what your theme actually generates and match that instead. Register a dedicated size for social previews, and remember that new sizes need wp media regenerate before existing images have them.

Optimise the file, not just the dimensions — JPEG at quality 85 or WebP, and load the featured image eagerly since it is usually the LCP element. If you are working out what a WordPress site with a large media library costs in storage and bandwidth, the RunxBuild hosting calculator lists them separately.

Useful related references:

FAQ

What is the best featured image size for WordPress?

1200×630 covers most themes and matches what social platforms expect for large link previews. There is no universally correct answer because themes register their own sizes, so check yours with wp eval 'print_r(wp_get_registered_image_subsizes());' and match the largest one it generates.

Why is my WordPress featured image cropped?

Because the theme requested a hard-cropped size with a different aspect ratio from your upload. WordPress crops from the centre by default, which cuts the top and bottom off a portrait image. Register a size with a crop position such as array('center', 'top'), or upload at the ratio the theme uses.

Do I need to regenerate thumbnails after changing image sizes?

Yes. Sizes are generated at upload time, so registering a new one does nothing for existing images. Run wp media regenerate --only-missing --yes, or target a single size with --image_size= to make it much faster on a large library.

What size should the Open Graph image be?

1200×630, with explicit og:image:width and og:image:height tags and an absolute, publicly reachable URL. Keep it under about 1MB. Social platforms cache previews aggressively, so use each platform’s debug tool to force a re-scrape after changing it.

Should featured images be JPEG or WebP?

WebP where you can — it is typically 25 to 35 percent smaller than JPEG at equivalent quality and is supported everywhere that matters. JPEG at quality 85 is a fine fallback for photographs. Reserve PNG for images that genuinely need transparency, since photographs as PNG are enormous.

#wordpress#featured image#image sizes#thumbnails#og image