<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Benjamin Oats</title>
    <description>The latest articles on DEV Community by Benjamin Oats (@benoats).</description>
    <link>https://dev.to/benoats</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4000805%2F22a4d6be-daa1-4ebe-af7e-1d1b6f861c78.jpg</url>
      <title>DEV Community: Benjamin Oats</title>
      <link>https://dev.to/benoats</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/benoats"/>
    <language>en</language>
    <item>
      <title>Meta Description Length: How Long Before Google Cuts It</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Thu, 10 Sep 2026 07:23:48 +0000</pubDate>
      <link>https://dev.to/benoats/meta-description-length-how-long-before-google-cuts-it-g79</link>
      <guid>https://dev.to/benoats/meta-description-length-how-long-before-google-cuts-it-g79</guid>
      <description>&lt;p&gt;Ask five SEO tools how long a meta description should be and you'll get five different numbers, usually somewhere between 150 and 160 characters. None of them are wrong exactly, but none of them are the actual rule either, because Google doesn't truncate by character count. It truncates by pixel width, and pixel width depends on which letters you used.&lt;/p&gt;

&lt;p&gt;That mismatch is why a meta description that looked fine in your SEO plugin's character counter can still show up in Google search results cut off mid-word with an ellipsis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why character count is the wrong unit
&lt;/h2&gt;

&lt;p&gt;Every character in a Google search snippet takes up a different amount of horizontal space depending on its width. A lowercase "i" or "l" is narrow. A capital "W" or "M" is wide. A string of 155 narrow characters fits comfortably; a string of 155 wide characters gets clipped well before it reaches the end.&lt;/p&gt;

&lt;p&gt;Google renders search result snippets in a fixed-width container, roughly 920 pixels on desktop, and truncates whatever text overflows that container, adding an ellipsis. There's no character limit written into that logic — the limit is purely visual. This is exactly the same mechanism that governs title tag truncation, just applied to the description line instead of the headline.&lt;/p&gt;

&lt;p&gt;Practically, this means a description written mostly in narrow lowercase letters can run past 160 characters and still display fully, while a description packed with capitals and wide letters can get clipped at 130. The character-count guidance you see everywhere is a rough average, not a rule — it assumes typical mixed-case English text.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually gets cut, and where
&lt;/h2&gt;

&lt;p&gt;Google doesn't always use the meta description you wrote, either. If your written description doesn't answer the specific query well, Google frequently rewrites the snippet using text pulled from the page itself — a practice that's been true for years but still surprises people who assume their meta description is the final word on what shows in search.&lt;/p&gt;

&lt;p&gt;When Google does use your written description and it's too long for the container, truncation happens at the word boundary nearest the pixel limit, not mid-sentence at a fixed character mark. That's why two descriptions of the same character length can truncate at visibly different points — one might cut after "...best practices for" while another cuts cleanly after "...best practices."&lt;/p&gt;

&lt;p&gt;On mobile, the snippet container is narrower, so the safe length is shorter than desktop. A description that displays fully on desktop can still get clipped on a phone screen, which matters more than it used to given how much search traffic is mobile-first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing to the actual constraint
&lt;/h2&gt;

&lt;p&gt;You can't precisely control pixel width without a rendering tool, but you can write in a way that makes truncation less costly when it happens, and less likely in normal cases.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Front-load the value, not the setup.&lt;/strong&gt; Put the specific answer, number, or benefit in the first 100 characters. If Google clips the rest, the reader still gets the part that earns the click.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep to roughly 120–155 characters as a working target&lt;/strong&gt;, treating 155 as the point where risk rises rather than a hard wall. This mirrors the same logic as title tag pixel width vs character count — character count is a proxy, not the metric itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid stacking capitalised words or numerals near the end of the sentence.&lt;/strong&gt; If your last clause is doing real work ("...saves 3 hours a week"), move it earlier rather than gambling on whether it survives truncation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a complete thought that still makes sense if the last few words disappear.&lt;/strong&gt; Test this by mentally deleting the final 10–15 characters and reading what's left — if it still reads as a finished sentence, you're safe either way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check a sample of your live pages in an actual Google search&lt;/strong&gt;, not just your SEO plugin's preview bar. Plugin previews are a helpful character-count guide, but they don't render in the same font or container Google actually uses, so they can look fine in the plugin and still clip in results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check after any site font or theme change.&lt;/strong&gt; This sounds unrelated, but some SEO plugin previews inherit theme typography for the preview render — a font change can shift what "looks fine" in the preview without changing anything about the real Google-rendered result, so don't over-trust the preview as a source of truth either way.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where WordPress sites get this wrong most often
&lt;/h2&gt;

&lt;p&gt;The single most common failure isn't overly long descriptions — it's descriptions that were written once, for one page, then reused as a template across dozens of similar pages (product categories, location pages, tag archives) with only a keyword swapped in. A template built around one specific product name's character length breaks the moment you plug in a longer or shorter product name, and at scale nobody's checking each result individually.&lt;/p&gt;

&lt;p&gt;The second most common failure is no meta description at all, which forces Google to auto-generate the snippet from page content. That's not always bad — sometimes Google's pick is genuinely more relevant to the query than a generic template would be — but it means you've given up control of the exact hook that shows in search, which is the whole point of writing one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there an exact character limit for meta descriptions in 2026?
&lt;/h3&gt;

&lt;p&gt;No single number is exact, because Google truncates by pixel width in a roughly 920px container, not by character count. As a working target, 120–155 characters is a reasonable range for most mixed-case English text, with risk of truncation rising as you approach the upper end. Descriptions written with a lot of capital letters, numerals, or wide characters should aim shorter than that range; descriptions in mostly narrow lowercase text have more room. Mobile snippets use a narrower container than desktop, so mobile-safe length is shorter still.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does Google sometimes ignore my meta description entirely?
&lt;/h3&gt;

&lt;p&gt;Google generates its own snippet from on-page content when it judges the written meta description to be a weaker match for the specific search query than the page text itself, or when the description is missing, too generic, or duplicated across many pages. This has been documented Google behaviour for years and isn't a penalty — it's an attempt to show the most query-relevant snippet available. Writing a specific, query-relevant description (rather than a generic template) is the main lever you have to reduce how often this happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does meta description length affect ranking, or just click-through?
&lt;/h3&gt;

&lt;p&gt;Length itself isn't a ranking factor. Google has been explicit that meta descriptions don't directly influence rankings the way title tags and content can. Where length matters is indirect: a well-written, correctly-sized description improves click-through rate from the search results page, and click-through behaviour is one of many signals that can influence how a page performs over time. Treat meta description work as a click-through optimisation, not a direct ranking lever.&lt;/p&gt;




&lt;p&gt;If you're maintaining meta descriptions across a large WordPress site, &lt;a href="https://oppti.dev/plugins/titles" rel="noopener noreferrer"&gt;OpptiAI Titles&lt;/a&gt; scans your pages for missing or weak meta descriptions and title tags, then drafts replacements you review before applying — designed to run alongside Yoast, Rank Math, or AIOSEO rather than replace them.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>metadescriptions</category>
      <category>titles</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>WooCommerce Multi-Vendor Alt Text: The Vendor Upload Gap</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Thu, 10 Sep 2026 07:23:43 +0000</pubDate>
      <link>https://dev.to/benoats/woocommerce-multi-vendor-alt-text-the-vendor-upload-gap-1dfa</link>
      <guid>https://dev.to/benoats/woocommerce-multi-vendor-alt-text-the-vendor-upload-gap-1dfa</guid>
      <description>&lt;p&gt;If you run a WooCommerce marketplace with plugins like Dokan, WCFM, or WC Vendors, your alt text problem isn't the same as a normal store's. It's not that nobody thought about alt text — it's that dozens of vendors are uploading product images through their own dashboards, and none of them are thinking about it either.&lt;/p&gt;

&lt;p&gt;A single-vendor store has one upload habit to fix. A marketplace has as many habits as it has vendors, and you don't control any of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why marketplace alt text breaks differently
&lt;/h2&gt;

&lt;p&gt;On a normal WooCommerce site, product images go through one admin, maybe two. If you train yourself to add alt text on upload, coverage stays reasonably high because you're the only variable.&lt;/p&gt;

&lt;p&gt;On a marketplace, every vendor has their own workflow. Some upload from a phone camera roll with filenames like &lt;code&gt;IMG_4821.jpg&lt;/code&gt;. Some bulk-import via CSV from a supplier feed that never had alt text to begin with. Some use a mobile app version of the vendor dashboard that skips the alt text field entirely, even when it's present on desktop.&lt;/p&gt;

&lt;p&gt;The result is that alt text coverage on a marketplace isn't a single number — it's a distribution. You might have three vendors at 90% coverage and twelve at 0%, and the site-wide average hides that completely. Averages are the wrong metric here; you need per-vendor visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vendor dashboards don't enforce what your theme does
&lt;/h2&gt;

&lt;p&gt;Dokan, WCFM, and WC Vendors all give vendors a version of the WordPress media uploader, but it's frequently a trimmed-down one. WC Vendors' classic frontend product form, for instance, has historically made the alt text field easy to skip because it's a secondary field below the main image picker, not part of the required-fields validation.&lt;/p&gt;

&lt;p&gt;That's a plugin design choice, not a WordPress limitation — the underlying &lt;code&gt;wp_postmeta&lt;/code&gt; alt text field still exists and still gets read by your theme and by Google Images. It's just that nothing in the vendor's upload flow nudges them to fill it in, and nothing on your end blocks a product from going live without it.&lt;/p&gt;

&lt;p&gt;You can ask vendors nicely in your onboarding docs. Most marketplace owners do, and most vendors ignore it, the same way most of us ignore a terms-of-service checkbox. Documentation doesn't scale against upload volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost: it's not just accessibility
&lt;/h2&gt;

&lt;p&gt;Missing alt text on a marketplace compounds a problem you already have: vendor products competing against each other and against outside sellers for the same search terms. If Vendor A's listing for "ceramic plant pot" has descriptive alt text and Vendor B's identical-category listing doesn't, Vendor A's images are more likely to surface in Google Images search — a channel that WooCommerce marketplaces routinely under-use compared to text search.&lt;/p&gt;

&lt;p&gt;There's also a fairness angle marketplace owners don't always think about. If your platform's SEO health depends partly on vendor behaviour you can't control, vendors who happen to write good alt text get free distribution advantage over vendors who don't, for reasons that have nothing to do with product quality. Closing the gap sitewide levels that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auditing coverage across vendors, not just products
&lt;/h2&gt;

&lt;p&gt;Because the problem is distributed, the fix starts with visibility per vendor, not per product. Before you touch a single image, you want an answer to: which vendors are dragging the average down, and how bad is it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scan the whole product catalogue for missing or empty alt text.&lt;/strong&gt; OpptiAI Alt Text's scan works across the WordPress Media Library regardless of which plugin uploaded the image, so it picks up Dokan, WCFM, and WC Vendors uploads the same way it picks up admin uploads — there's no vendor-plugin-specific integration needed because they all ultimately write to the same media table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-reference the missing list against vendor/product ownership.&lt;/strong&gt; Most multi-vendor plugins store the vendor ID on the product post, so you can export the missing-alt-text list alongside &lt;code&gt;_dokan_vendor_id&lt;/code&gt; (or the equivalent WCFM/WC Vendors meta key) and see coverage broken down by seller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rank vendors by gap size, not just percentage.&lt;/strong&gt; A vendor with 40% coverage across 5 products is a smaller problem than a vendor with 40% coverage across 400. Fix the highest absolute image count first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate and review in batches per vendor.&lt;/strong&gt; Work through the worst vendor's backlog with AI-drafted alt text, reviewing each suggestion before saving — a vendor's product images can be visually repetitive (the same white-background product shot repeated with colour variants), and a generic model will sometimes miss the difference between "blue ceramic plant pot" and "green ceramic plant pot" if it isn't shown context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a going-forward rule, then check it monthly.&lt;/strong&gt; New vendor uploads will keep arriving with the same gaps unless you re-scan on a schedule. A one-time cleanup buys you a few months of good numbers, not a permanent fix.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Should you require alt text at vendor onboarding?
&lt;/h2&gt;

&lt;p&gt;If your marketplace plugin supports it, adding alt text as a required field in the vendor product submission form is the single change with the biggest effect — it stops the gap from growing while you clean up the backlog. WC Vendors and WCFM both expose product form customisation through hooks, so this is achievable without a custom plugin, though it does take some development time to wire up per marketplace plugin.&lt;/p&gt;

&lt;p&gt;Realistically, most marketplace owners don't have the engineering time to customise vendor-facing forms, which is why a periodic scan-and-fix pass tends to be the more practical long-term habit: assume vendors won't add alt text, and build the correction into your existing catalogue maintenance instead of your onboarding flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Dokan or WCFM have a built-in alt text requirement?
&lt;/h3&gt;

&lt;p&gt;Not by default. Both let vendors upload product images through a simplified version of the WordPress media picker, and the alt text field is present but optional in the standard vendor product form. Some premium Dokan modules add extra product fields, but alt text enforcement isn't one of the common ones. You'd need custom form hooks (or a support ticket to your marketplace plugin's developer) to make it required at the point of vendor upload.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I bulk-fix alt text for one vendor without touching the whole catalogue?
&lt;/h3&gt;

&lt;p&gt;Yes — as long as you can filter your product list by vendor, which every major multi-vendor plugin supports through vendor ID metadata or a vendor-specific admin filter. Export or filter to that vendor's products first, then run the scan and generate step against just that subset. This is the more sustainable approach on a large marketplace: fixing 200 vendors' worth of images in one pass is overwhelming, but working through the worst five vendors this week and the next five next week keeps the task manageable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will fixing alt text actually change how much traffic vendor products get from Google Images?
&lt;/h3&gt;

&lt;p&gt;It removes a barrier rather than guaranteeing a result. Google Images uses alt text as one signal among several — surrounding page text, image file quality, and site authority all matter too. What alt text reliably does is make a previously invisible-to-image-search product image visible to it at all; whether it then ranks well depends on the same competitive factors as any other image SEO effort. Marketplaces with genuinely large gaps (many products with zero alt text) tend to see the clearest before/after difference, simply because they're going from "not indexed for images at all" to "indexed."&lt;/p&gt;




&lt;p&gt;If vendor upload gaps are dragging down your marketplace's alt text coverage, &lt;a href="https://oppti.dev/plugins/alt-text" rel="noopener noreferrer"&gt;OpptiAI Alt Text&lt;/a&gt; scans your whole WordPress Media Library — regardless of which vendor plugin wrote the image — and lets you review AI-drafted alt text before it saves. You can also run a one-off &lt;a href="https://oppti.dev/image-seo-audit" rel="noopener noreferrer"&gt;free image SEO audit&lt;/a&gt; to see where your current coverage actually stands before deciding how much of a backlog you're dealing with.&lt;/p&gt;

</description>
      <category>woocommerce</category>
      <category>alttext</category>
      <category>imageseo</category>
      <category>multivendor</category>
    </item>
    <item>
      <title>Catch New Uploads Before Alt Text Debt Comes Back</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Mon, 07 Sep 2026 07:14:36 +0000</pubDate>
      <link>https://dev.to/benoats/catch-new-uploads-before-alt-text-debt-comes-back-35k9</link>
      <guid>https://dev.to/benoats/catch-new-uploads-before-alt-text-debt-comes-back-35k9</guid>
      <description>&lt;h1&gt;
  
  
  Catch New Uploads Before Alt Text Debt Comes Back
&lt;/h1&gt;

&lt;p&gt;You cleared the backlog. You even set up autopilot for new uploads. And somehow, three months later, there's a small pile of images with no alt text again. Neither a one-off cleanup nor an automation rule is airtight — uploads happen outside the plugin, rules get disabled for a plugin update and never re-enabled, someone imports a batch through a route the automation doesn't cover. The gap between "should be covered" and "is actually covered" is exactly where debt quietly rebuilds.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/sdPaW06dIpc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "we automated it" isn't the same as "it's covered"
&lt;/h2&gt;

&lt;p&gt;Automation rules are built against assumptions about how images enter your site: through the standard Media Library uploader, one at a time or in a small batch. Real sites don't always cooperate with that assumption. A theme update ships new default images. A bulk import tool adds product photos directly to the database, bypassing the normal upload hook the automation listens for. A plugin gets deactivated for twenty minutes during a migration, and every image uploaded in that window never triggers the rule at all.&lt;/p&gt;

&lt;p&gt;None of these are failures of the automation doing its job badly — they're gaps in what the automation was ever asked to cover. The only way to catch them is a periodic check that isn't relying on any single upload path, just counting what's actually missing right now, regardless of how it got that way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a catch-early routine actually checks
&lt;/h2&gt;

&lt;p&gt;The goal isn't a full re-audit every time — that's the cleanup you already did. It's a fast, recurring check specifically aimed at catching drift before it becomes a backlog again:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A simple count, checked on a schedule.&lt;/strong&gt; How many images in the library currently have empty alt text? Not which ones, not why — just the number, checked weekly or monthly. A number that's consistently near zero means coverage is holding. A number that's crept up from 3 to 40 over two months is a signal that something in the pipeline stopped working, well before it's a real problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A check that isn't tied to the automation's own logs.&lt;/strong&gt; If you only ever check whether the autopilot rule "ran successfully," you'll miss the uploads that never reached the rule in the first place. Counting actual missing alt text sitewide catches both automation failures and images that entered outside the automation's reach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A trigger for investigation, not just a number to note.&lt;/strong&gt; If the count jumps, the next step is finding out how those images got in — new import tool, plugin conflict, a batch uploaded while the automation was briefly off — not just clearing them and moving on. Fixing the images without finding the gap means the same gap produces the same jump again next month.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set a recurring reminder&lt;/strong&gt; — weekly is reasonable for an active site, monthly for a quieter one — to check the sitewide count of images missing alt text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare the count to your last check.&lt;/strong&gt; A flat or falling number means coverage is holding. A rising number means something changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If it rose, sort the newly-missing images by upload date&lt;/strong&gt; and look at what else happened around that time — a plugin update, a bulk import, a theme change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the immediate gap&lt;/strong&gt; by running a bulk pass over just the newly missing images, rather than a full re-scan of the whole library.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address the root cause&lt;/strong&gt; if you found one — re-enable a disabled rule, extend the automation to cover the import tool that bypassed it, or flag the theme update for review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log the check date and count&lt;/strong&gt; somewhere simple, even just a note, so the next check has a baseline to compare against instead of guessing whether the current number is normal.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  If autopilot is already generating alt text on upload, why would I still need to check manually?
&lt;/h3&gt;

&lt;p&gt;Because autopilot only covers the upload paths it's built to listen for — typically the standard Media Library uploader. Bulk imports, direct database inserts, and images added while a plugin was briefly deactivated can all bypass that trigger entirely. A periodic count-based check catches images regardless of how they entered the site, which is the only way to know autopilot is actually catching everything it's supposed to, rather than assuming it is because no errors showed up in a log.&lt;/p&gt;

&lt;h3&gt;
  
  
  How often should I check for new missing alt text?
&lt;/h3&gt;

&lt;p&gt;It depends on how frequently your site adds images. A site publishing daily with regular product or blog image uploads should check weekly, since a week of accumulation is still a small, fast fix. A site that adds images rarely can check monthly without much risk of the count growing unmanageable between checks. The specific cadence matters less than having one at all — a monthly check that actually happens beats a weekly one that gets skipped for three months straight.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's a normal number of images missing alt text on an active WordPress site?
&lt;/h3&gt;

&lt;p&gt;There's no universal target, but the trend matters more than the absolute number. A small, stable count — a handful of images that are genuinely still in progress or awaiting a decision — is normal and not worth chasing to zero constantly. A count that's steadily climbing check over check, even slowly, means something in your upload pipeline isn't covered the way you think it is, and that's worth investigating before it turns into another full cleanup project.&lt;/p&gt;

&lt;p&gt;Remembering to run this check on a schedule is its own kind of manual overhead. &lt;a href="https://oppti.dev/plugins/alt-text" rel="noopener noreferrer"&gt;OpptiAI Alt Text&lt;/a&gt; tracks your sitewide missing-alt-text count automatically so drift shows up without a recurring reminder — try the free &lt;a href="https://oppti.dev/image-seo-audit" rel="noopener noreferrer"&gt;image SEO audit&lt;/a&gt; to see your current count as a starting baseline.&lt;/p&gt;

</description>
      <category>imageseo</category>
      <category>alttext</category>
      <category>wordpress</category>
      <category>workflow</category>
    </item>
    <item>
      <title>Set Up Autopilot Alt Text for New WordPress Uploads</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Mon, 07 Sep 2026 07:13:49 +0000</pubDate>
      <link>https://dev.to/benoats/set-up-autopilot-alt-text-for-new-wordpress-uploads-5eo1</link>
      <guid>https://dev.to/benoats/set-up-autopilot-alt-text-for-new-wordpress-uploads-5eo1</guid>
      <description>&lt;h1&gt;
  
  
  Set Up Autopilot Alt Text for New WordPress Uploads
&lt;/h1&gt;

&lt;p&gt;Manually writing alt text for every image you upload works right up until you're too busy to keep doing it, and on a site with any regular content flow, that's most weeks. The realistic fix isn't a stronger habit — it's a rule that fires automatically the moment an image lands in the library, so alt text stops depending on anyone remembering to write it.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/TWU3RUxhdEc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why manual coverage always slips on new uploads
&lt;/h2&gt;

&lt;p&gt;A one-off cleanup fixes the images already in your library. It does nothing for the image someone uploads next Tuesday, or the batch of twelve product photos added during a launch. Manual alt text depends on the person doing the upload also remembering, every single time, to stop and write a description — and that habit is the first thing to drop when there's a deadline, a large batch, or simply a different person doing the upload who wasn't part of the original cleanup.&lt;/p&gt;

&lt;p&gt;Autopilot solves a different problem than a cleanup does. A cleanup clears a backlog once. Autopilot stops a new backlog from forming, because the alt text gets generated at upload time regardless of who uploaded the image or how much of a hurry they were in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an autopilot rule actually needs to specify
&lt;/h2&gt;

&lt;p&gt;Turning on "automatic" alt text isn't a single switch — it's a small set of decisions that determine whether the automation helps or quietly causes new problems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When it fires.&lt;/strong&gt; The most useful trigger is upload time itself, before the image is attached to a post or product. Generating alt text later, after the image is already published somewhere, means there's a window where the image is live with no alt text at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it's allowed to overwrite.&lt;/strong&gt; An autopilot rule that regenerates alt text on every image, including ones a human already wrote a description for, will happily erase manual work. The rule should only fill in images where the alt attribute is empty — never overwrite existing text unless you're explicitly running a refresh pass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whether it publishes immediately or queues for review.&lt;/strong&gt; Fully automatic with no review step is the fastest option and the riskiest — a wrong description on a product image goes live the moment it's generated. Queuing new autopilot suggestions as "needs review" for a daily five-minute check is slower by exactly that five minutes and catches errors before a customer or screen reader user ever sees them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which parts of the site it covers.&lt;/strong&gt; Product images, blog post images, and decorative theme assets don't need the same treatment — decorative images should typically get empty alt text rather than a generated description. An autopilot rule that treats every upload the same will describe decorative images that shouldn't have a description at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: setting the rule up
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Decide the trigger&lt;/strong&gt;: set the rule to fire on upload, before the image is attached to any post, page, or product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restrict it to empty alt text only&lt;/strong&gt;, so existing manually written descriptions are never touched by the automation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose a review mode&lt;/strong&gt; — for a new setup, start with "queue for review" rather than instant-publish, so you can watch a week of output before trusting it unattended.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exclude decorative asset folders or theme images&lt;/strong&gt; from the rule if your setup has a predictable place for them, so the automation isn't wasting generations on images that should have empty alt text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the review queue daily for the first week&lt;/strong&gt;, spot-checking a handful of generated descriptions against their images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to instant-publish only once the queue has run clean&lt;/strong&gt; for a stretch you're comfortable with — and keep an occasional spot-check going even after that, since autopilot removes the manual step, not the need for occasional oversight.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does autopilot alt text replace the need for a one-off cleanup?
&lt;/h3&gt;

&lt;p&gt;No — they solve different problems. A cleanup addresses the images already in your library that predate any automation; autopilot only covers uploads from the point it's switched on. If you turn on autopilot without also clearing the existing backlog, you'll have two populations of images: new ones with alt text, and everything older still missing it. Most sites need both: a cleanup pass first, then autopilot to stop the backlog from reforming.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should autopilot alt text publish instantly or wait for review?
&lt;/h3&gt;

&lt;p&gt;Wait for review, at least initially. Instant-publish is faster, but it means a wrong or oddly-generated description goes live the moment it's created, with no chance to catch it before a visitor or screen reader encounters it. Queuing suggestions for a quick daily check costs a few minutes and catches the errors that instant-publish would have shipped straight to the site. Once you've watched the automation's output for a week or two and trust it, moving to instant-publish is reasonable — but it's a decision to make after observing the rule, not before.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will an autopilot rule overwrite alt text I already wrote by hand?
&lt;/h3&gt;

&lt;p&gt;It shouldn't, if configured correctly — the rule should only apply to images where the alt attribute is currently empty. That said, this is a setting to verify explicitly rather than assume, because a misconfigured "regenerate all" mode will happily overwrite manually written descriptions the automation has no way of knowing were deliberate. Check this specifically when you first set the rule up, and test it on a couple of images you've already written alt text for before trusting it against your whole library.&lt;/p&gt;

&lt;p&gt;Configuring trigger conditions, review queues, and exclusion rules by hand takes a fair amount of setup work before the automation actually saves you time. &lt;a href="https://oppti.dev/plugins/alt-text" rel="noopener noreferrer"&gt;OpptiAI Alt Text&lt;/a&gt; includes autopilot rules for new uploads with a review queue built in, so new images get covered without you writing custom logic — try the free &lt;a href="https://oppti.dev/image-seo-audit" rel="noopener noreferrer"&gt;image SEO audit&lt;/a&gt; first to see how much of your current backlog predates any automation.&lt;/p&gt;

</description>
      <category>imageseo</category>
      <category>alttext</category>
      <category>wordpress</category>
      <category>automation</category>
    </item>
    <item>
      <title>Bulk-Edit Alt Text From a Filtered List, Not the Media Library</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Mon, 07 Sep 2026 07:13:41 +0000</pubDate>
      <link>https://dev.to/benoats/bulk-edit-alt-text-from-a-filtered-list-not-the-media-library-48bb</link>
      <guid>https://dev.to/benoats/bulk-edit-alt-text-from-a-filtered-list-not-the-media-library-48bb</guid>
      <description>&lt;h1&gt;
  
  
  Bulk-Edit Alt Text From a Filtered List, Not the Media Library
&lt;/h1&gt;

&lt;p&gt;The WordPress Media Library is built around one attachment at a time: open an image, scroll to the alt text field, type, save, close, open the next one. That's fine for one image. It's the slowest possible way to fix alt text across a few hundred, and it's the reason most alt text cleanups start strong and quietly stop after the first afternoon.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/P9e-kKyFTGc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-attachment tax
&lt;/h2&gt;

&lt;p&gt;Every click inside the default Media Library modal costs you the same fixed overhead regardless of how simple the edit is: open the attachment details panel, locate the alt text field among the other metadata, click into it, type or paste, click out, close the panel, find the next image. None of that overhead scales down as the batch gets bigger — it's a flat tax per image, and on a library with 400 images it adds up to hours of pure clicking before you've written a single useful description.&lt;/p&gt;

&lt;p&gt;That tax is why "we'll clean up alt text next sprint" so often turns into three images fixed and then abandonment. The problem isn't that the team doesn't care about alt text — it's that the tool they're using charges the same overhead per image whether they're fixing one or four hundred.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working from a bulk surface instead
&lt;/h2&gt;

&lt;p&gt;The fix is to stop treating alt text as an attachment-detail field and start treating it as a list you can filter, scan, and edit in place. A bulk ALT surface — a table of images with their current alt text alongside them — removes almost all of the per-image overhead: no modal to open and close, no hunting for the right field, just a row you can read and edit directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filter before you generate or fix anything.&lt;/strong&gt; Split the library into "missing entirely" and "needs review" before you touch a single image. Missing alt text is a different job from weak alt text — missing needs a first pass, weak needs editing — and mixing the two into one undifferentiated list means you're constantly switching mental modes mid-task. Filter first, work one category at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate or fix from the filtered list, not the attachment page.&lt;/strong&gt; Once you're looking at just the "missing" set, you can move through it as a batch — reading each suggestion in context of its thumbnail, right there in the row, rather than clicking through to a separate screen for every single image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spot-check before you trust it.&lt;/strong&gt; Bulk generation is fast precisely because it doesn't stop to ask you about every image, which means weak or wrong suggestions can slip through if you save without looking. A quick scan of the batch before committing catches the AI describing a product in the wrong colour or missing that an image is actually decorative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save single-attachment edits for genuine exceptions.&lt;/strong&gt; Once the bulk pass is done, a handful of images will need individual attention — an unusual product shot, an image where the AI clearly misread context. That's exactly what the attachment-detail view is good for. The mistake is using it as the default tool for every image instead of the fallback for the few that need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open the bulk ALT view&lt;/strong&gt; and filter to "Missing" first — this is the highest-value pass because these images currently contribute nothing to accessibility or image SEO.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work through the missing set in the list view&lt;/strong&gt;, generating or writing alt text directly against each thumbnail without navigating to a separate attachment screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch the filter to "Needs review"&lt;/strong&gt; once missing is cleared, and repeat — these are images with alt text present but weak (too short, keyword-stuffed, or generic "image123.jpg"-style filler).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spot-check a sample of what you just saved&lt;/strong&gt; before moving on, reading the suggestion against the actual thumbnail rather than trusting the text alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note which images still need manual attention&lt;/strong&gt; — anything ambiguous, decorative, or where the AI clearly got the context wrong — and handle those individually in the attachment detail view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-run the filtered view periodically&lt;/strong&gt;, not just once. New uploads land in "Missing" the moment they're added, and a bulk surface only stays useful if you keep coming back to it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is bulk-editing alt text riskier than editing one image at a time?
&lt;/h3&gt;

&lt;p&gt;Not if you filter and spot-check rather than blindly applying suggestions to an unfiltered batch. The risk in one-by-one editing isn't lower, it's just spread out and harder to notice — a rushed manual edit on image 340 of 400 is just as likely to be wrong as a bulk-generated one, you're just less likely to catch it because nobody reviews individually-edited alt text the way they'd review a batch. Filtering first and spot-checking after keeps the accuracy bar the same while cutting the time by an order of magnitude.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between "Missing" and "Needs review" when filtering a media library?
&lt;/h3&gt;

&lt;p&gt;"Missing" means the alt attribute is empty or absent entirely — these images contribute nothing to screen readers or image search right now. "Needs review" means alt text exists but is likely weak: too short to be descriptive, stuffed with repeated keywords, or generic filler like a filename. Treating them as the same category wastes effort, because fixing "missing" is a generation problem and fixing "needs review" is an editing problem — different tasks, different mental mode, best done as two separate passes rather than interleaved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I bulk-edit alt text for product images the same way as blog images?
&lt;/h3&gt;

&lt;p&gt;The workflow is the same, but the review bar is higher for products. A wrong or vague alt text on a blog post image is a minor SEO miss; a wrong alt text on a product photo — describing the wrong colour or variant — can actively mislead a customer using a screen reader, and it looks sloppy if a customer ever checks the image's alt attribute directly. Filter and generate in bulk for both, but spend more of your spot-check time on the product batch specifically.&lt;/p&gt;

&lt;p&gt;Building and maintaining a filtered bulk view by hand means writing custom queries against the media library just to get a workable list. &lt;a href="https://oppti.dev/plugins/alt-text" rel="noopener noreferrer"&gt;OpptiAI Alt Text&lt;/a&gt; gives you that filtered Missing/Needs-review surface out of the box, with AI suggestions flagged for review before they save — try the free &lt;a href="https://oppti.dev/image-seo-audit" rel="noopener noreferrer"&gt;image SEO audit&lt;/a&gt; to see how many images on your own site would land in each filter.&lt;/p&gt;

</description>
      <category>imageseo</category>
      <category>alttext</category>
      <category>wordpress</category>
      <category>bulkediting</category>
    </item>
    <item>
      <title>WordPress Title Tag Templates by Page Type</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:21:31 +0000</pubDate>
      <link>https://dev.to/benoats/wordpress-title-tag-templates-by-page-type-395b</link>
      <guid>https://dev.to/benoats/wordpress-title-tag-templates-by-page-type-395b</guid>
      <description>&lt;h1&gt;
  
  
  WordPress Title Tag Templates by Page Type
&lt;/h1&gt;

&lt;p&gt;A WordPress site has at least three fundamentally different kinds of page — the homepage, archive pages (category, tag, author, date), and single posts or products — and each needs its own title tag template, not one pattern stretched across all of them. Use a single-post template on an archive page and you get a title that reads like it's about one thing when the page is actually a list of twelve. Use an archive template on the homepage and you get a title with no brand name and no reason for anyone to click it in a results page full of competitors.&lt;/p&gt;

&lt;p&gt;Most WordPress SEO plugins ship with a separate template field for each page type for exactly this reason, but plenty of sites never touch the defaults, or touch one and forget the others exist. The result is a site where the homepage title is fine, the blog looks good, and every category and tag archive is quietly generating duplicate or nonsensical titles that nobody's checked in months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why one template doesn't work across page types
&lt;/h2&gt;

&lt;p&gt;A title tag template is a pattern with placeholders — things like &lt;code&gt;%title% | %sitename%&lt;/code&gt; — that gets filled in differently depending on the page. The trouble starts when the same placeholder pattern makes sense in one context and not another.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;%title% | %sitename%&lt;/code&gt; works well for a single post: the post has one clear title, and appending the site name gives search results a bit of brand context. Apply that same template to a category archive and &lt;code&gt;%title%&lt;/code&gt; resolves to the category name — "Jumpers | Acme Knitwear" — which is fine on its own, but if your author archive template resolves to the same shape ("John Smith | Acme Knitwear"), your date archive to "March 2026 | Acme Knitwear", and your tag archive to "Sale | Acme Knitwear", you end up with a site full of near-identical, low-information titles that all compete with each other for the same handful of words.&lt;/p&gt;

&lt;p&gt;The homepage has the opposite problem: there's no &lt;code&gt;%title%&lt;/code&gt; to fill in, because the homepage isn't "about" a single topic the way a post or category is. A template built for single posts either leaves the homepage title blank or falls back to something generic like the site's tagline repeated on every visit, when the homepage title is actually prime real estate for your primary keyword plus brand name.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each page type's template should actually contain
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Homepage:&lt;/strong&gt; Primary keyword or value proposition, then brand name — &lt;code&gt;%sitename% | %primary_keyword_or_tagline%&lt;/code&gt; or the reverse, depending on whether brand recognition or keyword relevance matters more for your traffic. This is the one title on the whole site that should be hand-written rather than templated, since there's only one homepage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single posts and pages:&lt;/strong&gt; &lt;code&gt;%title% | %sitename%&lt;/code&gt; is the standard pattern, and it works because every post has a genuinely distinct, specific title. Keep the post title itself doing the descriptive work; the site name at the end is just context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single products (WooCommerce):&lt;/strong&gt; &lt;code&gt;%title% | %category% | %sitename%&lt;/code&gt; if your catalogue has enough products that category context helps differentiate near-identical product titles ("Blue Jumper | Knitwear | Acme"), otherwise the same pattern as single posts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Category and tag archives:&lt;/strong&gt; &lt;code&gt;%term% Articles | %sitename%&lt;/code&gt; or &lt;code&gt;%term% | %sitename%&lt;/code&gt; — the key difference from single-post templates is signalling that the page is a collection, not one piece of content. "Jumpers Archive" or "Jumpers | Acme Knitwear" both read correctly as "a list of things," where "Jumpers | Acme Knitwear" alone can look like a single-product title out of context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Author archives:&lt;/strong&gt; &lt;code&gt;Posts by %author% | %sitename%&lt;/code&gt; rather than just &lt;code&gt;%author% | %sitename%&lt;/code&gt; — without "Posts by," an author archive title is indistinguishable from a person's personal bio page, which is a different search intent entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Date archives:&lt;/strong&gt; These rarely deserve to be indexed at all on a typical WordPress site — they're usually thin, duplicate content covering the same posts as your category archives. If you can't noindex them outright, at minimum make the template explicit: &lt;code&gt;Posts from %date% | %sitename%&lt;/code&gt;, so if one does get indexed it's at least clearly labelled rather than looking like a real content page.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: auditing your title tag templates
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open your SEO plugin's title settings&lt;/strong&gt; (Yoast: SEO → Search Appearance; Rank Math: Rank Math → Titles &amp;amp; Meta; AIOSEO: All in One SEO → Search Appearance) and find the separate tabs or sections for homepage, single posts, single pages, categories, tags, and author archives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check each template resolves to something distinct.&lt;/strong&gt; Pick one real example page of each type and mentally fill in the template. If two different page types produce titles that look interchangeable, that's the collision to fix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirm the homepage template isn't just the single-post template applied to page ID 1.&lt;/strong&gt; This is the most common miss — a homepage that title-tags itself the same way a blog post would.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check whether date archives are indexed at all.&lt;/strong&gt; If they're not providing any value distinct from your category pages, noindexing them removes the template problem entirely rather than requiring you to get the wording right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spot-check five to ten live pages of each type in Google's cache or a "site:" search&lt;/strong&gt; to confirm the templates are actually rendering as configured — plugin conflicts and theme overrides occasionally stop a template from applying even though the settings look correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check after any theme or SEO plugin migration.&lt;/strong&gt; Title templates are one of the settings most likely to reset to defaults or fail to carry over cleanly during a migration, and it's easy not to notice until traffic on archive pages has already dropped.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do archive page titles matter if I don't actively promote category or tag pages?
&lt;/h3&gt;

&lt;p&gt;Yes, because Google indexes and can rank them whether or not you promote them, and a badly templated archive title can end up being the first impression a searcher gets of your site even if you never intended that page to be an entry point. A category page ranking for a broad term with a title that just repeats the tag name and site name is a missed opportunity to say something more specific and clickable, not a non-issue just because it wasn't the page you were trying to rank.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use different title templates for different categories, or does it have to be one template for all archives?
&lt;/h3&gt;

&lt;p&gt;Most WordPress SEO plugins let you override the template on a per-term basis even while a sitewide default exists — Yoast, Rank Math, and AIOSEO all support editing an individual category or tag's SEO title from that term's edit screen. Use the sitewide template as the default for the long tail of categories and tags, and override individually for your highest-traffic ones where a more specific, hand-written title is worth the extra effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why do my category and product titles look identical in search results?
&lt;/h3&gt;

&lt;p&gt;This usually means your category archive template and single-product template resolve to the same shape when there's only one product in that category, or when the category name and product name happen to be similar. Check the actual rendered title of both page types side by side rather than just the template pattern — templates that look different on paper can still collide in practice depending on your content structure.&lt;/p&gt;

&lt;p&gt;Auditing templates across half a dozen page types is quick. Auditing whether every individual title actually rendered correctly across hundreds of posts, products, and archive terms — and catching the ones that silently reverted to a duplicate or a generic default — isn't a five-minute job. &lt;a href="https://oppti.dev/plugins/titles" rel="noopener noreferrer"&gt;OpptiAI Titles&lt;/a&gt; scans your WordPress site for missing, weak, and duplicate titles and meta descriptions and drafts fixes you review before applying, running alongside Yoast, Rank Math, or AIOSEO rather than replacing them.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>titletags</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Ideal Alt Text Length for WordPress SEO</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:21:25 +0000</pubDate>
      <link>https://dev.to/benoats/ideal-alt-text-length-for-wordpress-seo-197g</link>
      <guid>https://dev.to/benoats/ideal-alt-text-length-for-wordpress-seo-197g</guid>
      <description>&lt;h1&gt;
  
  
  Ideal Alt Text Length for WordPress SEO
&lt;/h1&gt;

&lt;p&gt;There's no hard character limit on WordPress alt text, but that doesn't mean any length will do. Write it too short and you throw away context a screen reader user or Google's image crawler actually needed. Write it too long and screen readers start truncating or skimming past it, while search engines read the extra words as an attempt to game rankings rather than describe a picture. Somewhere in the middle is a range that works for both audiences, and it's narrower than most WordPress default themes and page builders lead you to believe.&lt;/p&gt;

&lt;p&gt;Screen readers don't enforce a hard cutoff either, but JAWS and NVDA both start truncating extremely long alt text in practice, and testing has shown screen reader users losing patience with alt text that runs past roughly 125 characters — they'll skip to the next element before the description finishes. Google doesn't publish an alt text limit, but its own advice is "describe the image accurately and succinctly," which points the same direction as the accessibility guidance, not against it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "just describe the image" isn't specific enough
&lt;/h2&gt;

&lt;p&gt;Every WordPress alt text guide says "describe the image," and that's correct as far as it goes, but it doesn't tell you when to stop. A product photo, a decorative icon, and a complex infographic all need wildly different treatment, and a one-size answer like "keep it under 125 characters" breaks down the moment you hit an image that genuinely needs more context to be useful.&lt;/p&gt;

&lt;p&gt;The better question isn't "how many characters" but "how much does someone need to know to get the same information a sighted visitor gets from looking at this image, without extra words that don't add anything." For most WordPress content images, that lands naturally in the 80–125 character range. For complex images — charts, diagrams, multi-element product shots — it can run longer, but the extra length should all be doing work, not padding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What alt text that's too short looks like
&lt;/h2&gt;

&lt;p&gt;Short alt text usually fails by being generic rather than by being brief. "Product photo," "image1234.jpg" carried over as the alt text, or just the product name with no descriptive detail ("Blue jumper") are common WordPress patterns, especially on WooCommerce stores where alt text gets auto-populated from the filename or product title and nobody goes back to fix it.&lt;/p&gt;

&lt;p&gt;The test: if you removed the image and only had the alt text left, would you know what was actually shown? "Blue jumper" passes for a single product photo. It fails for a product gallery with six images of the same jumper from different angles, because "Blue jumper" repeated six times tells a screen reader user nothing about which photo is the front view versus the fabric close-up versus the model wearing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What alt text that's too long looks like
&lt;/h2&gt;

&lt;p&gt;Long alt text usually fails by trying to do two jobs at once: describing the image and stuffing in keywords, or describing the image and writing marketing copy. "Beautiful comfortable blue merino wool jumper perfect for winter, buy now for the best price on lightweight cosy knitwear" is alt text with a marketing brief hiding inside it. Strip out everything that isn't describing what's visually in the frame — "Navy blue merino wool jumper, crew neck, folded flat" — and you get something a screen reader can finish reading before the user moves on, and something Google can trust because it reads like a description rather than an ad.&lt;/p&gt;

&lt;p&gt;The other long-alt-text failure is over-describing genuinely simple images: a plain arrow icon doesn't need "Right-pointing arrow icon in brand blue colour indicating forward navigation to the next page in the checkout flow." "Continue to next step" or, if it's purely decorative navigation chrome, an empty alt attribute, both beat that.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: setting a length target for your site
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick a working range, not a hard limit.&lt;/strong&gt; 80–125 characters is a reasonable default for most content images on a WordPress site — long enough to be specific, short enough to be read in full by assistive tech.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sort your images by type before you audit length.&lt;/strong&gt; Product photos, blog post images, icons, and infographics all have different natural lengths. Applying one number across all of them is how you end up over-describing icons and under-describing infographics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For anything under 15 characters, check it's not a placeholder.&lt;/strong&gt; Filenames, "image," "photo," and single words with no context are the usual culprits and are almost always worth rewriting regardless of your target range.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For anything over 150 characters, look for keyword stuffing or marketing copy first.&lt;/strong&gt; Genuinely complex images (data visualisations, step-by-step diagrams) are the exception — check whether every extra word is describing content the image actually contains before deciding the length is justified.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read each alt text aloud at conversational speed and time it.&lt;/strong&gt; If it takes more than about eight seconds to say, a screen reader user is likely to move on before it finishes. That's a more reliable check than counting characters, because it accounts for how dense the wording is, not just how long the string is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check after bulk edits.&lt;/strong&gt; Bulk alt text tools and CSV imports can apply the same template to hundreds of images at once, which is efficient but easy to get systematically wrong in one direction — worth spot-checking a sample against the length target after any bulk pass.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there an official WordPress or Google character limit for alt text?
&lt;/h3&gt;

&lt;p&gt;No. WordPress itself places no limit on the alt attribute's length, and Google has never published a maximum character count for alt text. Google's guidance is qualitative — accurate and succinct — rather than numeric. The 125-character figure that circulates widely comes from screen reader behaviour under testing, not from a platform-enforced rule, which is why it's a practical guideline rather than a hard cutoff you'll get penalised for crossing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should alt text length be different for WooCommerce product images versus blog post images?
&lt;/h3&gt;

&lt;p&gt;Usually not by much, but the failure modes differ. WooCommerce product images tend to run too short because alt text gets auto-filled from the product title and never edited, especially across galleries with multiple angles of the same product. Blog post images tend to run too long because writers describe context and mood rather than just content. The same 80–125 character target works for both — what changes is which direction you're correcting from.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does longer alt text always help image SEO more than shorter alt text?
&lt;/h3&gt;

&lt;p&gt;No. Google's image ranking systems look for alt text that accurately matches the image content and the surrounding page context, not for alt text that's simply longer or keyword-dense. Padding a description past the point of accuracy — adding brand adjectives, calls to action, or repeated keywords — reads as manipulation to Google's systems in the same way it reads as noise to a screen reader user, and can work against the image rather than for it.&lt;/p&gt;

&lt;p&gt;Checking length across a handful of images by hand takes a minute. Checking it across a media library with hundreds of images — separating the ones that are too short, too long, or just missing entirely — isn't realistic to do manually. &lt;a href="https://oppti.dev/plugins/alt-text" rel="noopener noreferrer"&gt;OpptiAI Alt Text&lt;/a&gt; scans your WordPress media library and flags alt text outside a healthy length range alongside missing and low-quality entries, so the fixes worth making by hand are the ones you actually see. Start with the &lt;a href="https://oppti.dev/image-seo-audit" rel="noopener noreferrer"&gt;free image SEO audit&lt;/a&gt; if you want a quick read on where your site stands first.&lt;/p&gt;

</description>
      <category>imageseo</category>
      <category>alttext</category>
      <category>wordpress</category>
      <category>a11y</category>
    </item>
    <item>
      <title>New Uploads Keep Undoing Your Alt Text Cleanup</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:11:55 +0000</pubDate>
      <link>https://dev.to/benoats/new-uploads-keep-undoing-your-alt-text-cleanup-2746</link>
      <guid>https://dev.to/benoats/new-uploads-keep-undoing-your-alt-text-cleanup-2746</guid>
      <description>&lt;h1&gt;
  
  
  New Uploads Keep Undoing Your Alt Text Cleanup
&lt;/h1&gt;

&lt;p&gt;You ran the cleanup. Missing alt text went from a few hundred images to zero, and the media library finally looked done. Then a few weeks later someone checks again and there's a fresh batch of gaps — not the old ones coming back, but new images that were never covered in the first place. A cleanup only clears what existed on the day you ran it; every image uploaded after that point starts without alt text unless something is actively catching it.&lt;/p&gt;

&lt;p&gt;Here's the short video that prompted this post, on why that gap reopens so quickly.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/BdnWLMkI7Xw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why new uploads keep breaking a finished cleanup
&lt;/h2&gt;

&lt;p&gt;A one-off cleanup and an upload pipeline solve two different problems, and treating them as the same thing is where the backlog restarts. The cleanup is a fixed scope: everything in the Media Library at the moment you scanned it. The upload pipeline is ongoing: every product added to WooCommerce, every image dropped into a new blog post, every photo pulled in through a page builder or an import script. None of those future uploads were in scope for the cleanup, because they didn't exist yet.&lt;/p&gt;

&lt;p&gt;On a quiet site that might mean five or six new images a month, which is easy to miss and easy to catch up on later. On a site publishing daily, or a WooCommerce store adding new products every week, it's a steady drip that adds up fast. Three sources tend to account for most of it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual uploads without a habit attached.&lt;/strong&gt; Someone adds a featured image or a product photo and moves on to the next task. Alt text isn't part of the upload step in their head, so it doesn't get typed in — not out of carelessness, just because nothing in the workflow prompts for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bulk imports and feeds.&lt;/strong&gt; A CSV product import, a migration from another platform, or a syndicated content feed rarely carries the alt text field across cleanly. You can end up with hundreds of new images missing alt text in a single afternoon, which looks like the old backlog reappearing but is actually a new one from a different source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theme and page builder defaults.&lt;/strong&gt; Some blocks and templates insert images without prompting for alt text at all, especially decorative background images or gallery blocks. If the block never asks, most people never think to go back and add it.&lt;/p&gt;

&lt;p&gt;None of these are the cleanup "wearing off." The cleanup did its job on the images it covered. The gap is that nothing was watching the images added afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning a one-off cleanup into ongoing coverage
&lt;/h2&gt;

&lt;p&gt;The fix isn't a bigger cleanup — it's making the check part of how uploads happen, not a separate task you remember to do later. A few changes cover most of the drip:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add an alt text step to the actual upload habit.&lt;/strong&gt; If images go in through a specific person or a specific process (a content editor publishing posts, someone adding new products), make alt text part of that step rather than a follow-up task. A one-line checklist item next to "set featured image" catches far more than a policy nobody re-reads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check imports before they finish, not after.&lt;/strong&gt; If products or content arrive through a CSV or a feed, check whether the source data includes an alt text column before the import runs. If it doesn't, treat the import as a known gap and schedule a pass on just that batch immediately — not whenever the backlog gets noticed again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Re-scan on a fixed cadence, scoped to what's new.&lt;/strong&gt; Rather than a full re-scan of the whole library, filter by upload date since the last check. This keeps the review batch small enough to actually finish, instead of ballooning back into a project-sized cleanup every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: closing the gap after new uploads land
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Filter the Media Library by upload date&lt;/strong&gt;, not the whole library — everything added since your last check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-reference with the alt text field.&lt;/strong&gt; Most sites can filter or sort by missing alt text directly; if not, a plugin that flags it saves manually opening each image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch the new images only.&lt;/strong&gt; This list should be small if you're checking regularly — usually a handful to a few dozen, not hundreds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write or generate alt text for that batch&lt;/strong&gt;, checking it describes the actual image rather than repeating a generic product name or keyword.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note where the images came from.&lt;/strong&gt; If most of this batch traces back to one import or one contributor, that's the source worth fixing at the process level, not just the images worth fixing today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set the next check date before you close the tab.&lt;/strong&gt; A cadence you actually keep — weekly for a busy site, monthly for a quiet one — beats a one-off cleanup you never repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How often should I re-check for new missing alt text?
&lt;/h3&gt;

&lt;p&gt;Match it to your upload frequency, not a fixed calendar rule. A site publishing daily or a store adding products weekly needs a weekly check; a slower site can go monthly. The test isn't the interval itself — it's whether the batch you find each time stays small. If it's growing between checks, tighten the cadence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it worth fixing alt text at the point of upload, or is a periodic sweep enough?
&lt;/h3&gt;

&lt;p&gt;Both matter, but they're not equally reliable on their own. Catching it at upload time is cheaper — one image, one person, no backlog forms. But it depends on someone remembering every time, which slips under deadline pressure. A periodic sweep is the safety net that catches whatever upload-time habits miss, so relying on just one leaves a gap the other would have covered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does a bulk import cause so many missing alt text images at once?
&lt;/h3&gt;

&lt;p&gt;Most import formats — CSV product feeds, platform migrations, syndicated content — don't have a required field for alt text, so if the source data doesn't include it, the import completes without it and nothing flags the gap. It looks like a sudden spike compared with the slow drip of manual uploads, but the fix is the same: check what the import actually carried across, and treat any gap as its own small batch to clear right away rather than waiting for the next general scan.&lt;/p&gt;

&lt;p&gt;Checking every new upload by hand works until the upload volume outpaces the time you have for it. &lt;a href="https://oppti.dev/plugins/alt-text" rel="noopener noreferrer"&gt;OpptiAI Alt Text&lt;/a&gt; scans your WordPress Media Library on an ongoing basis — not just once — so images added after your last cleanup get picked up automatically, ranked by where they actually appear on the site, with alt text drafted for you to review before it saves. If you want to see where a site stands right now, the &lt;a href="https://oppti.dev/image-seo-audit" rel="noopener noreferrer"&gt;free image SEO audit&lt;/a&gt; gives you a snapshot without installing anything.&lt;/p&gt;

</description>
      <category>imageseo</category>
      <category>alttext</category>
      <category>wordpress</category>
      <category>workflow</category>
    </item>
    <item>
      <title>Keep Your WordPress Title Health Score From Slipping</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:14:43 +0000</pubDate>
      <link>https://dev.to/benoats/keep-your-wordpress-title-health-score-from-slipping-4co6</link>
      <guid>https://dev.to/benoats/keep-your-wordpress-title-health-score-from-slipping-4co6</guid>
      <description>&lt;h1&gt;
  
  
  Keep Your WordPress Title Health Score From Slipping
&lt;/h1&gt;

&lt;p&gt;Getting a title health score from red to green is the visible win — you run the audit, fix the worst offenders, and watch the number climb. What doesn't get talked about as much is that the score doesn't stay where you left it. Three months after a clean-up, plenty of sites check back in and find the score has quietly slid from green back into amber, without anyone doing anything that felt like breaking it.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/kcaNj0VLQ94" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a fixed score doesn't stay fixed
&lt;/h2&gt;

&lt;p&gt;A health score is a snapshot of the site at the moment it was calculated. Every new post, product, or landing page published after that snapshot is a new title tag that hasn't been checked against anything — and WordPress themes and page builders are generally happy to publish content with no title tag at all, or a generic one pulled straight from the post title with no thought toward search intent. Each new unchecked page is a small drag on the aggregate score, and thirty new posts published without a title review is thirty new red or amber entries dragging the average down.&lt;/p&gt;

&lt;p&gt;The other quiet contributor is content that gets edited after publication. A post title changes to reflect an update, a product gets renamed, a category gets restructured — and the underlying title tag either doesn't get updated to match, or gets reset to a template default by whatever workflow triggered the change. Neither of these events feels like "breaking the site's SEO," which is exactly why they go unnoticed until the next full audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The maintenance gap most sites fall into
&lt;/h2&gt;

&lt;p&gt;Most sites treat a title audit as a project with a start and an end: run the crawl, fix the list, close the ticket. That framing works fine for a one-time cleanup of historical debt, but it has no mechanism for catching what happens to content published after the project closed. The site is left with a snapshot that ages the same way an old sitemap ages — technically accurate on the day it was taken, increasingly wrong every week after.&lt;/p&gt;

&lt;p&gt;The fix isn't a bigger one-time project, it's treating title health the same way you'd treat uptime monitoring or backup verification: a recurring check with a low enough time cost that it actually happens on schedule, rather than a large audit that only gets scheduled when someone notices rankings have slipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: building a maintenance habit instead of a one-off project
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set a recurring re-scan cadence&lt;/strong&gt; — weekly for sites publishing multiple times a week, monthly for sites publishing a handful of posts a month. The cadence should roughly match your publishing frequency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope each recurring check to what's new or changed&lt;/strong&gt; rather than re-auditing the entire site every time — new posts since the last scan, plus anything edited, is usually a small enough list to review in minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a threshold that triggers a closer look&lt;/strong&gt;, not just a raw score number — for example, "score drops more than five points in a week" is a more useful trigger than "score isn't 100."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build the check into your publishing workflow&lt;/strong&gt;, not a separate calendar reminder that competes with everything else — a checklist item on the same step where you hit publish is more likely to actually happen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-run a full sitewide audit quarterly&lt;/strong&gt; regardless of the incremental checks, since drift can compound in ways a narrow "what's new" scan won't catch — renamed categories, retired products, restructured navigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track the score over time, not just at a point in time.&lt;/strong&gt; A single snapshot tells you where you stand; a trend line tells you whether your process is actually holding.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much does a title health score typically drop per month without maintenance?
&lt;/h3&gt;

&lt;p&gt;It depends heavily on publishing volume, but a site adding ten to twenty new pages a month with no title review process can see a meaningful score drop within a single quarter, since each unchecked new page starts at whatever the default template produces rather than a reviewed title. Sites that publish rarely see slower drift, but aren't immune — renamed content and category restructuring can move a low-publishing-volume site's score just as much.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a monthly re-scan enough, or does it need to be more frequent?
&lt;/h3&gt;

&lt;p&gt;Monthly is a reasonable default for most sites publishing a few times a week. Sites publishing daily, or running frequent product launches on WooCommerce, benefit from a lighter weekly check focused just on newly published content, with the full sitewide audit staying on a monthly or quarterly cycle regardless.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does editing an old post's content affect its title health score even if I don't touch the title field?
&lt;/h3&gt;

&lt;p&gt;Not directly — the title field itself has to change for the score to move. But content edits are often the trigger for a title becoming stale even though the field wasn't touched: if a post's focus shifts significantly during an edit but the original title stays, the title can become misleading relative to the new content, which is worth catching on a manual read even though it won't show up as a scoring error on its own.&lt;/p&gt;

&lt;p&gt;A health score that's only checked when someone remembers to run it isn't really being maintained. &lt;a href="https://oppti.dev/plugins/titles" rel="noopener noreferrer"&gt;OpptiAI Titles&lt;/a&gt; re-scans your site on an ongoing basis, catches new and edited pages before they drag the average down, and drafts fixes you review — so green stays green instead of becoming next quarter's project.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>titletags</category>
      <category>wordpress</category>
      <category>metadescriptions</category>
    </item>
    <item>
      <title>Fixing WooCommerce Product Title Tags Without the Grind</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:14:21 +0000</pubDate>
      <link>https://dev.to/benoats/fixing-woocommerce-product-title-tags-without-the-grind-2pc3</link>
      <guid>https://dev.to/benoats/fixing-woocommerce-product-title-tags-without-the-grind-2pc3</guid>
      <description>&lt;h1&gt;
  
  
  Fixing WooCommerce Product Title Tags Without the Grind
&lt;/h1&gt;

&lt;p&gt;A WooCommerce store with 300 products doesn't have 300 title tags to write, it has 300 title tags to write on top of everything else that comes with running a store — inventory, orders, product photography, seasonal pricing. Title tags lose that competition for attention almost every time, which is why so many WooCommerce catalogues end up with dozens of products still carrying the theme's generic default: "Product Name – Store Name" repeated with nothing to differentiate one product from the next in a search result.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RBfOOK2lWRs" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why product catalogues are worse than a normal blog backlog
&lt;/h2&gt;

&lt;p&gt;A blog with a title tag backlog usually has that problem on 20 or 30 posts. A WooCommerce catalogue multiplies the same problem by however many SKUs are in the store, plus every category and tag archive layered on top. Variable products make it worse again — a shirt in five colours and three sizes might generate variation-specific pages or at minimum a product page trying to rank for a query more specific than "shirt," and the default title template rarely accounts for that.&lt;/p&gt;

&lt;p&gt;The other WooCommerce-specific wrinkle is that product titles change more often than blog post titles. Seasonal renames, a supplier's product name update, a rebrand of a product line — each one potentially invalidates a title tag that was fine six months ago. A one-time audit gets stale faster on a catalogue than on static content.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a good WooCommerce product title actually needs
&lt;/h2&gt;

&lt;p&gt;A generic template like "%product_title% – %site_title%" isn't wrong, exactly, it's just wasted space. A title tag has roughly 55–60 characters of real estate before truncation in search results, and a template that spends half of it repeating the site name on every single product page is giving up the chance to include something a shopper is actually searching for — material, size range, use case, or a distinguishing feature that separates this product from a competitor's near-identical listing.&lt;/p&gt;

&lt;p&gt;Category and tag archive pages have the same issue in miniature: a category page titled just "Category Name – Store Name" tells a searcher nothing about what's actually in that category that a competitor's category page doesn't also claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: auditing and fixing a WooCommerce catalogue's titles
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Export the full product and category list&lt;/strong&gt; with current title tags — most SEO plugins or a crawler can pull this alongside the product ID and category taxonomy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate products from categories from tags.&lt;/strong&gt; Each needs a slightly different fix: products benefit from specific attributes (material, size, use case), categories benefit from a description of what's inside, tags often shouldn't be indexed at all if they're thin and duplicate category content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flag anything still on the theme's default template.&lt;/strong&gt; This is usually the largest bucket and the easiest to spot — identical structure repeated across every product with only the product name swapped in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft replacements using actual product attributes&lt;/strong&gt;, not just the product name — pull from the product description or specs where available, since "Waterproof Hiking Boots, Men's Size 8–13" beats "Hiking Boots" on both relevance and click-through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prioritise by revenue or traffic&lt;/strong&gt;, not alphabetically. Your top 20 products by sales or organic impressions matter more to fix correctly than the bottom 100 that rarely get a visit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check after any bulk import or supplier feed update&lt;/strong&gt;, since those commonly overwrite manually-set titles with whatever the feed provides.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Should every product have a completely unique title, or is a template acceptable?
&lt;/h3&gt;

&lt;p&gt;A template is fine as a starting point, but it needs to pull in something product-specific — attribute, variant, or use case — rather than just the product name and site name. A search result full of near-identical titles across your own catalogue actively works against you, since Google may choose to rewrite the snippet itself if it judges your title unhelpful, and you lose control over what shows up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do WooCommerce product variations need their own title tags?
&lt;/h3&gt;

&lt;p&gt;If variations generate separate indexable URLs, yes, they need titles distinct enough to avoid duplicating the parent product's title exactly. If variations are handled entirely through a dropdown on a single product URL with no separate page generated, the single product page's title is what matters and there's nothing extra to fix at the variation level — check your theme and WooCommerce settings to confirm which situation applies.&lt;/p&gt;

&lt;h3&gt;
  
  
  How often should a WooCommerce catalogue's titles be re-audited?
&lt;/h3&gt;

&lt;p&gt;Any time there's a bulk product import, a supplier feed sync, or a seasonal catalogue refresh, since those are the events most likely to silently overwrite titles you'd already fixed. Outside of those events, a quarterly pass catches new products added since the last audit and anything that drifted back to a default template.&lt;/p&gt;

&lt;p&gt;Auditing three hundred product pages by hand isn't a realistic maintenance plan for most stores. &lt;a href="https://oppti.dev/plugins/titles" rel="noopener noreferrer"&gt;OpptiAI Titles&lt;/a&gt; scans your full WooCommerce catalogue — products, categories, and tags — flags what's missing or generic, and drafts specific replacements you review before anything goes live.&lt;/p&gt;

</description>
      <category>woocommerce</category>
      <category>titletags</category>
      <category>wordpress</category>
      <category>seo</category>
    </item>
    <item>
      <title>Does a Title Tag Tool Conflict With Yoast? Here's the Proof</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:13:26 +0000</pubDate>
      <link>https://dev.to/benoats/does-a-title-tag-tool-conflict-with-yoast-heres-the-proof-2e1a</link>
      <guid>https://dev.to/benoats/does-a-title-tag-tool-conflict-with-yoast-heres-the-proof-2e1a</guid>
      <description>&lt;h1&gt;
  
  
  Does a Title Tag Tool Conflict With Yoast? Here's the Proof
&lt;/h1&gt;

&lt;p&gt;The question comes up every time someone considers a second SEO-adjacent plugin: won't it fight with Yoast? It's a reasonable worry, because WordPress has a real history of plugins stepping on each other's output when two of them try to control the same thing — two caching plugins, two plugins both minifying the same CSS file, two SEO plugins both trying to write a sitemap. The fear isn't irrational. It's just usually solvable with one question: which specific field does each plugin actually write to?&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/O1A2s8-JFHg" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the actual conflict risk lives
&lt;/h2&gt;

&lt;p&gt;A genuine plugin conflict happens when two plugins register their own separate meta field for the same purpose, and the theme or the SEO output only reads one of them — so the other plugin's data silently never shows up, or worse, both try to render a &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; tag and the page ends up with two of them in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, which browsers and crawlers resolve in unpredictable ways.&lt;/p&gt;

&lt;p&gt;Yoast owns the WordPress title tag field. It stores its title and meta description in its own custom fields (&lt;code&gt;_yoast_wpseo_title&lt;/code&gt; and &lt;code&gt;_yoast_wpseo_metadesc&lt;/code&gt;), reads them back into its meta box UI, and outputs the final &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;meta name="description"&amp;gt;&lt;/code&gt; tags into the page head. Any tool that wants to actually change what shows up in a Google search result for that page has to write into those same fields — not invent parallel ones — or the change never reaches the live page at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a title audit tool avoids stepping on that
&lt;/h2&gt;

&lt;p&gt;A tool built to work alongside Yoast doesn't register its own competing title field. It reads the current value out of Yoast's field to know what's there now, scores it, drafts a replacement, and — critically — writes the approved replacement back into that same Yoast field rather than a new one. From Yoast's point of view, nothing unusual happened: the title field was empty or weak, and now it has a value, the same as if you'd typed it into the meta box yourself. Yoast's snippet preview, its readability scoring, its sitemap generation, and its schema output all keep working off the same field, because that's the field that changed.&lt;/p&gt;

&lt;p&gt;This is different from a tool that duplicates functionality Yoast already owns — a second XML sitemap generator, for instance, genuinely can conflict, because now there are two sitemaps and search engines don't know which to trust. A title-drafting tool that writes into Yoast's existing field isn't duplicating a system, it's filling in a value inside the one that's already there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually check before trusting any "works alongside Yoast" claim
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ask which field it writes to.&lt;/strong&gt; If the answer is "we store our own value and it doesn't touch Yoast's field," that's a real yellow flag — it likely means the plugin's output never reaches the actual page &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, or worse, both end up rendering and conflicting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the live page source after a test edit.&lt;/strong&gt; View source on a page you've changed and confirm there's exactly one &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; tag and one meta description tag, matching what you approved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirm Yoast's snippet preview updates.&lt;/strong&gt; If you approve a new title and it shows up correctly in Yoast's own preview box on next page load, that's direct evidence the two are reading the same underlying value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with Rank Math or AIOSEO too, if you use one of those instead&lt;/strong&gt; — the same field-ownership logic applies, just under each plugin's own meta key naming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-run your sitemap and schema validation&lt;/strong&gt; after a batch of changes to confirm nothing about Yoast's structured output broke.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can I run a title tool and Yoast SEO on the same WordPress site safely?
&lt;/h3&gt;

&lt;p&gt;Yes, as long as the tool writes into Yoast's own title and meta description fields rather than creating separate ones. The two plugins then serve different purposes on the same data: Yoast handles the field, the snippet preview, and the on-page SEO checklist; the other tool handles finding what's missing sitewide and drafting the fix. Neither one needs exclusive control to do its job.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I tell if a plugin is actually writing to Yoast's field versus its own?
&lt;/h3&gt;

&lt;p&gt;The most reliable check is comparing the live page's &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; tag before and after a change, alongside Yoast's own snippet preview in the editor. If both update together and match, they're reading and writing the same value. If Yoast's preview stays unchanged while the live page title changes (or vice versa), something is writing to a separate field and you have a real conflict worth investigating.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does this same logic apply to Rank Math and AIOSEO, not just Yoast?
&lt;/h3&gt;

&lt;p&gt;Yes — the underlying principle is the same regardless of which SEO plugin holds the title field, only the specific meta key name differs. Any tool claiming compatibility with Rank Math or AIOSEO should be able to answer the same question: which field does it read from and write to, and does that match the field the SEO plugin itself renders into the page.&lt;/p&gt;

&lt;p&gt;The proof isn't a compatibility badge, it's what actually shows up in view-source after a change. &lt;a href="https://oppti.dev/plugins/titles" rel="noopener noreferrer"&gt;OpptiAI Titles&lt;/a&gt; writes drafts you approve directly into the title and meta description fields your existing SEO plugin already owns and renders — nothing parallel, nothing competing.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>titletags</category>
      <category>wordpress</category>
      <category>yoast</category>
    </item>
    <item>
      <title>Fix Title Tags at Scale Without Ditching Yoast or Rank Math</title>
      <dc:creator>Benjamin Oats</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:13:24 +0000</pubDate>
      <link>https://dev.to/benoats/fix-title-tags-at-scale-without-ditching-yoast-or-rank-math-3fci</link>
      <guid>https://dev.to/benoats/fix-title-tags-at-scale-without-ditching-yoast-or-rank-math-3fci</guid>
      <description>&lt;h1&gt;
  
  
  Fix Title Tags at Scale Without Ditching Yoast or Rank Math
&lt;/h1&gt;

&lt;p&gt;Most sites with a title tag problem don't have one bad title, they have two hundred. The site owner already has Yoast or Rank Math installed, already knows how to edit a single title field in the block editor, and still ends up with a backlog because editing two hundred fields one at a time isn't a workflow, it's a queue that never clears. The instinct is to assume fixing this at scale means replacing the SEO plugin. It doesn't.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/yZWXBuwljv0" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "at scale" and "keep your current plugin" aren't in tension
&lt;/h2&gt;

&lt;p&gt;Yoast and Rank Math are built to manage the title and meta description field on a single post, well — live preview, a snippet editor, a readability check. What they're not built for is finding every page across a two-hundred-post site that's missing a title, then drafting replacements for all of them in one pass. That's a bulk-audit problem, and it's a different job from the per-post editing job Yoast and Rank Math already do well.&lt;/p&gt;

&lt;p&gt;Splitting the two jobs apart is what actually makes scale possible. A bulk tool scans the whole site, flags what's wrong, and drafts a fix. Yoast or Rank Math still owns the field where that fix ultimately lands, still renders the live snippet preview, and still runs whatever on-page checks you rely on day to day. Nothing about running a sitewide audit tool requires uninstalling the plugin that already understands your site's SEO settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually breaks when people try to do this manually
&lt;/h2&gt;

&lt;p&gt;Say a site has 180 posts and 40 product pages with a title tag issue — missing, duplicated, or generic. Fixing that manually means opening each post, scrolling to the Yoast or Rank Math meta box, writing a replacement, and saving. At a realistic pace of two to three minutes per page once you include reading the content for context, that's eight to eleven hours of pure editing time for one pass. Most people start this project on a Monday with good intentions and stop by Wednesday with sixty pages left, because the backlog doesn't get smaller fast enough to feel like progress.&lt;/p&gt;

&lt;p&gt;The other common failure is doing it in a rush: batch-editing titles from a spreadsheet export without checking each one against the actual page content, which produces titles that are technically present but generic or slightly wrong for the page. A title that says "Product" isn't better than no title at all if it's the same string on twelve different pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical walkthrough: bulk-fixing titles without losing your current setup
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run a full crawl&lt;/strong&gt; of the site to get every URL's current title tag and meta description into one list — a spreadsheet export from your crawler of choice works, or a plugin that does this natively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flag the failure modes separately&lt;/strong&gt;: missing, duplicate, over-length, under-length. Don't lump them into one generic "needs work" bucket — a missing title and a slightly-too-long title need different fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draft replacements against actual page content&lt;/strong&gt;, not just the URL slug. This is the step that turns a bulk edit into something worth publishing rather than filler text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review each draft before it goes live.&lt;/strong&gt; Bulk doesn't mean unattended — spot-check a sample from each failure category, and read every draft for anything customer-facing or high-traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save through your existing SEO plugin's field&lt;/strong&gt;, so Yoast or Rank Math's snippet preview, sitemap, and schema output all stay consistent with what actually publishes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-crawl after the batch&lt;/strong&gt; to confirm every flagged page now shows a title, and that nothing introduced a fresh duplicate across the batch.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Will a bulk title tool conflict with Yoast or Rank Math's own title settings?
&lt;/h3&gt;

&lt;p&gt;Not if it writes to the same field Yoast or Rank Math reads from rather than a separate custom field. The plugin still owns its snippet preview, its title-tag templates for archives and taxonomies, and any schema markup tied to the title — a bulk fix tool just handles the drafting and saving for a large batch of individual pages, using the field the SEO plugin already expects.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does a sitewide title fix actually take with a bulk workflow?
&lt;/h3&gt;

&lt;p&gt;For a two-hundred-page backlog, a bulk audit and draft pass typically compresses what would be eight-plus hours of manual editing into a review session of an hour or two, since the drafting step is automated and your time goes to approving rather than writing from scratch. The exact time depends on how many drafts need editing versus straight approval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I fix every flagged title in one batch, or spread it out?
&lt;/h3&gt;

&lt;p&gt;Prioritise by traffic first if you can pull Search Console data — pages with real impressions should be first, since that's where a better title actually changes click-through rate. If you don't have traffic data handy, doing it in batches of 20–30 with a re-crawl between batches catches mistakes early rather than compounding them across two hundred pages.&lt;/p&gt;

&lt;p&gt;Fixing titles at scale doesn't mean replacing the SEO plugin you already trust. &lt;a href="https://oppti.dev/plugins/titles" rel="noopener noreferrer"&gt;OpptiAI Titles&lt;/a&gt; runs the sitewide audit, drafts the replacements against your actual page content, and hands them to you for review — the fix still saves through Yoast, Rank Math, or AIOSEO's own title field.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>titletags</category>
      <category>wordpress</category>
      <category>yoast</category>
    </item>
  </channel>
</rss>
