Flash Object: What It Is, Why It Fails and How to Remove It
Flash no longer runs in any major browser, so an SWF embed leaves a blank box and no indexable text. See how the check works and how to fix it.
Free to use 10 min read Updated Oct 2026
What is a Flash object and why does it fail the SEO check?
Quick answer: A Flash object is a Shockwave Flash (SWF) movie placed on a page with an embed or object tag, and no current browser can play it. Our report fails a page when its rendered HTML contains an embed or object tag whose src points to an .swf file.
- Pass: The rendered page has no embed or object tag whose src contains .swf.
- Fail: At least one such tag exists, so visitors see an empty box and the check counts against your score.
- Fix: Remove the tag, rebuild the content in HTML5, then delete the .swf file.
The result is only ever pass or fail, because this check has no warning level. One failure lowers your score percentage.
What is a Flash object (Shockwave Flash and SWF)?
Macromedia Flash began as a browser plugin, and Adobe later took it over as Adobe Flash Player. A designer built a Flash animation in the authoring tool, kept the editable source as an .fla file and exported the compiled movie as an .swf file. Browsers recognized it by the MIME type application/x-shockwave-flash, video travelled as .flv, and the logic was written in ActionScript.
On a page the movie appeared as an embed tag with a src attribute, or as an object tag using a data attribute or a param tag named movie, often beside a classid starting with D27CDB6E. Many pages nested an embed inside the object as a fallback.
<embed src="/media/intro.swf" width="640" height="360" type="application/x-shockwave-flash">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="360">
<param name="movie" value="/media/intro.swf">
<embed src="/media/intro.swf" width="640" height="360">
</object>If you arrived because of a Shockwave Flash Object error in Office or an ActiveX prompt, that comes from a broken or removed Flash control in the program, not from a website. A Flash cookie is a local shared object file that no current browser creates.
The embed and object elements still exist in HTML, but they now serve content the browser handles itself, such as PDFs. The MDN embed reference states that plugins like Flash are no longer supported.
object versus embed in one minute
The embed element takes its file from src, while object takes it from data. Older markup nested an embed inside an object so Internet Explorer and other browsers each used one.
Why is a Flash object bad for SEO, mobile and security?
Nobody can see the movie. Adobe reached Flash end of life on 31 December 2020 and blocked Flash content from running from 12 January 2021. Chrome moved to HTML5 by default in version 55, had Flash disabled by default from version 76 and finished the Chrome 88 Flash removal, as the Chrome Flash removal timeline records. Firefox and Safari dropped the Flash plugin too, and Microsoft removed it from Edge and Internet Explorer 11 through Windows Update.
Search suffers next. A compiled SWF keeps its headings, copy and links inside the movie, so the page holds no indexable content for a crawler. Mobile suffers too: Flash never ran on an iPhone or iPad, and today the dead tag leaves a blank rectangle on every device, which can cause layout shift. Our mobile snapshot check shows how such a page looks on a phone.
Security is the smaller point. Adobe issues no more patches and tells people to uninstall Flash Player. A leftover tag cannot run in a current browser, so it is not an exploit by itself, only a sign of unsupported software.
None of this is a penalty as far as we know. The costs are lost content, lost visitors and a failed audit line.
What search engines can and cannot read
Google publishes its list of Google indexable file types, and SWF is not on it. Crawlers work from the text in your HTML, and our guide on how Google crawls pages explains the fetching and rendering steps.
How does the SEO Site Checker Flash test work?
Our audit opens your URL in headless Chromium and waits for the load event, with a 20 second limit. It takes the rendered page source, parses it, and collects every embed or object element whose src attribute contains the text .swf.
The exact rule: Passed means no embed or object element has a src containing .swf, ignoring case. Failed means one or more do. This check never returns a warning.
The match works anywhere in the value, so INTRO.SWF?v=3 fails, and so does a file named name.swf.pdf. A failure shows a red alert with a How to Fix button and counts as one failed check in the Advanced section and in the score percentage. The report shows pass or fail for the tested URL only, not the file names, so the section on finding Flash objects further down shows how to locate the file.
| Markup in the rendered page | Result | Why |
|---|---|---|
| Embed with src movie.swf | Fail | The src contains .swf. |
| Embed with src INTRO.SWF?v=3 | Fail | Case and query string do not matter. |
| Object wrapper with an embed fallback | Fail | The inner embed has an .swf src. |
| Embed added by a script before load | Fail | The check reads the rendered DOM. |
| Object with only a data attribute or movie param, or an embed with the Flash type and no src | Pass | Only src is tested. |
| Embed of a PDF, a tag in an HTML comment, or a swfobject.js include | Pass | No .swf in an embed or object src. |
What a pass does not prove
The standard way to embed Flash was an object tag with a data attribute, which is also what the SWFObject script writes. Our check reads src only, so that tag passes. A pass means no embed or object src contains .swf and nothing more, so search the source for .swf and x-shockwave-flash yourself. A swfobject.embedSWF call alone does not fail either, because it writes an object tag with a data attribute.
Why a noscript copy still fails
With scripts running, Chromium keeps noscript content as plain text, and the parser reads it back as real tags, so a fallback embed hidden there is counted.
How do I find Flash objects on my website?
Because the report only says pass or fail for the URL, you have to hunt for the file yourself, and these five checks catch most cases.
- Search the page source. Press Ctrl+U and search for .swf, x-shockwave-flash, swfobject and flashvars.
- Inspect the live DOM. View source misses movies that scripts insert, so search the Elements panel in DevTools too.
- Search your project. Run the commands below, and look at theme files, widgets, old posts and custom HTML blocks, which often live in the database.
- Check files and logs. Look in the uploads folder for .swf files and scan access logs for requests to them.
- Repeat per template. Run the report on the home page and every template with media.
grep -rIli "\.swf" .
find . -iname "*.swf"
SELECT ID FROM wp_posts WHERE post_content LIKE '%.swf%';The last line is a WordPress query for post content. On any other CMS, export the database as text and grep the dump. Also look for leftover parameters such as wmode, allowscriptaccess and flashvars, and for a swfobject.embedSWF call in script text, because they mark pages that once loaded a movie.
How to remove a Flash object and replace it with HTML5
- List every use. Note each page that loads an .swf and what the movie did, such as video, banner, menu or game.
- Pick a replacement. Use the table in the next section to replace Flash with HTML5 for each job.
- Swap the markup. Put the new element where the embed sat, for example a video tag with controls and an MP4 source.
- Add real text. Give the spot a heading, two sentences of copy, alt text and captions, so the page has something to index.
- Delete the leftovers. Remove the embed, object, param, noscript copy and swfobject include, then the .swf file. If it had inbound links, 301 redirect it.
- Test and re-run. Clear caches, check a phone viewport, then run the report again.
Preview new markup in the online HTML viewer and convert posters with the WebP converter.
Before and after markup
The first line below is the kind of tag our check catches. Everything after the blank line is plain HTML5 video with indexable copy.
<embed src="/media/intro.swf" width="640" height="360">
<h2>Two minute product tour</h2>
<p>See how the dashboard works, from sign in to export.</p>
<video controls poster="/media/intro-poster.webp" width="640" height="360">
<source src="/media/intro.mp4" type="video/mp4">
Your browser cannot play this video.
</video>Which HTML5 replacement fits each kind of Flash content?
Pick by what the file did, because no single swap suits every movie.
| What the Flash file did | Best replacement | Note |
|---|---|---|
| Flash intro or promo video | HTML5 video with MP4 or WebM | Add a poster image, captions and a transcript. |
| Flash banner or animation | CSS animation, SVG animation or Lottie | Adobe Animate and Google Web Designer export HTML5. |
| Flash game or app | JavaScript with canvas or WebGL | A rewrite, with WebAssembly for heavy logic. |
| Archive you must keep | Ruffle emulator | ActionScript 3 support is incomplete, and the player adds no text a crawler can index. |
| Menus, forms and layouts | Plain HTML and CSS | Better for accessibility and crawlers. |
Flash objects on WordPress, Shopify, Wix and static sites
On WordPress, search posts, widgets, theme header files and Custom HTML blocks for .swf. On Shopify, check theme.liquid, sections, snippets, templates and custom Liquid blocks, because old media often sits in all of them. On Wix and Squarespace, remove the embed or code block that loads the movie.
On static sites, run the grep command from earlier, then redirect or return 410 for each deleted .swf path. Below are an Apache rule and an Nginx one.
Redirect 410 /media/intro.swf
location = /media/intro.swf { return 410; }Common mistakes when removing Flash content
- Hiding the movie with display none. The tag stays in the DOM, so the check still fails.
- Leaving a fallback inside noscript. The parser reads it as real tags and counts it.
- Swapping in one image. A picture without text gives crawlers nothing.
- Stopping at Flash. Run the deprecated HTML tags check and the frameset check next.
Flash free page checklist
- No tag points at a movie. No embed or object src contains .swf.
- No files left behind. Uploads hold no .swf files, and old URLs redirect or return 410.
- The report is green. The Flash Test line passes, and you repeat it after each redesign.
For the wider audit, work through the technical SEO checklist.
How to Fix
The short version, the same steps you see when you click How to Fix in your report.
Why this fails: The report found at least one embed or object tag whose src points to an .swf file. Flash is a retired browser plugin, so visitors see an empty box, and the movie puts no text or links in your page HTML.
How to fix it:
- Find it. View the page source and search for .swf and x-shockwave-flash, and check object data attributes too. If nothing matches, a script adds the movie, so search the Elements panel in DevTools instead.
- Note the job. Write down what each movie did, such as video, animation, banner or game.
- Replace it. Use a video tag for video, CSS or SVG for animation and JavaScript canvas for games. Use the Ruffle emulator only for archives.
- Delete the leftovers. Remove the embed, object, param, noscript copy and swfobject script, then delete the .swf file. If its URL had inbound links, add a 301 redirect.
- Clear caches. Purge page, CDN and browser caches so the old markup stops appearing.
<embed src="/media/intro.swf" width="640" height="360">
<video controls poster="/media/intro-poster.webp" width="640" height="360">
<source src="/media/intro.mp4" type="video/mp4">
Your browser cannot play this video.
</video>grep -rIli "\.swf" .
find . -iname "*.swf"- WordPress: Check posts, widgets, theme header files and Custom HTML blocks. Posts live in the database, so search post content too.
- Shopify: Check theme.liquid, sections and custom Liquid blocks.
- Wix and Squarespace: Remove the embed or code block element that loads the movie.
- Static sites: Run the grep command above, delete the files, then redirect or return 410 for the old paths.
Re-test: Reload the page, search the source for .swf, confirm no embed or object tag remains, then run our free report again and look for the green Flash Test result. For dates and background, see the Chrome Flash removal timeline.
Frequently Asked Questions
What is a Shockwave Flash object?
What is an SWF file and what is it used for?
Is Flash obsolete and can any browser still run it?
Does Flash content hurt SEO?
How do I remove Flash from my website?
Why does a website say Flash Player is no longer supported?
How can I keep old Flash animations or games working?
How do I convert an SWF file to MP4 or HTML5?
See how your site scores right now
Paste your address into the free report, then use the How to Fix button on anything that needs work.
Free to use. Results in under a minute for most sites.