An RSS import works perfectly the first time and reveals its real quality the second time.

If the importer cannot recognize an item it has already processed, every scheduled run can create another WordPress post from the same source article. A feed containing 20 entries can become 40 posts after two runs, 60 after three, and a much larger cleanup after a weekend. Titles, images, taxonomies and notifications may be duplicated with them.

The solution is not to run the feed only once. A useful RSS importer must be repeatable: it should fetch the feed, identify every item, skip or update the records it has seen, create only genuinely new posts, and record what happened.

This tutorial uses Echo RSS Feed Post Generator Free for the basic workflow. The free edition includes unlimited rules, scheduled imports, full-content extraction, draft publishing and source-URL fingerprinting. The paid Echo RSS Feed Post Generator adds the tools needed for more demanding projects, including feed discovery, JavaScript-rendered extraction, live feed display, Gutenberg conversion and deeper RSS-field mapping.

The Short Answer

To import an RSS feed without duplicate posts, use a feed-to-post plugin that stores a stable identifier for every source item. In Echo Free, imported items are fingerprinted by source URL, so running the same rule again should continue from the last new item instead of recreating earlier posts. The paid listing also documents duplicate checking by title and/or URL.

Create one rule for one logical source, import into Draft status, enable logging, run the rule manually, and then run it a second time without changing anything. The second run should create zero posts. Only after that test passes should you enable a schedule.

URL matching is the safest ordinary default, but it is not infallible. The same story can arrive with tracking parameters, redirected URLs or different links in two feeds. Title matching can catch some of those cases, but two unrelated stories can legitimately share a title. For important sites, use URL checking as the primary identity, add title checking only where its false-positive risk is acceptable, and keep a review process for cross-feed edge cases.

Two Different Problems Are Called “Duplicate Content”

Before changing any setting, separate database duplication from search duplication.

ProblemWhat it meansCorrect control
Duplicate imported postsWordPress contains two or more posts for the same source feed itemSource identifier, URL/title checks, idempotent retries and import history
Duplicate mediaThe same remote image is downloaded into the Media Library more than onceMedia reuse rules, attachment auditing and controlled retries
Duplicate content across websitesYour imported post reproduces content already published at the source URLPermission, editorial value, attribution and an explicit canonical/noindex policy
Duplicate-looking titlesDifferent stories happen to have the same or nearly the same headlineDo not delete automatically; compare source URL, date, source and content

Echo’s duplicate detection solves the first problem. It does not grant permission to republish an article, decide which domain should rank, or guarantee that search engines will consolidate two copies. A canonical link can express a preferred URL, but it is not a copyright license and it does not repair two WordPress records already created in your database.

How RSS and Atom Identify an Item

An importer needs a stable identity that survives repeated checks. Feed formats provide several possible fields, but their quality depends on the publisher.

A typical RSS item looks like this:

<item>
    <title>Quarterly product update</title>
    <link>https://publisher.example/product-update/</link>
    <guid isPermaLink="false">article-84721</guid>
    <pubDate>Tue, 08 Sep 2026 08:30:00 GMT</pubDate>
    <description>Summary of the product update...</description>
</item>

The RSS 2.0 specification describes <guid> as an optional string that uniquely identifies an item. An aggregator may use it to determine whether the item is new. The format places responsibility on the feed publisher to keep that value unique and stable. A GUID can be a URL, but when isPermaLink="false", it must not be assumed to be a page that a browser can open.

Atom is stricter. Every entry must contain one atom:id, and RFC 4287 defines it as a permanent, universally unique identifier. The RFC says the ID should not change when an entry is moved, republished, exported or imported. It also requires character-by-character comparison, which means superficially equivalent strings can still count as different identifiers.

Real feeds are less tidy than their specifications. Some publishers regenerate GUIDs, omit them, reuse the same one, change a permalink, append campaign parameters or expose the same article through a category feed and a site-wide feed. A production importer therefore needs a documented fallback. Echo Free’s product page states that it fingerprints the source URL. The paid listing adds duplicate checking based on title and/or URL.

Why URL Matching Is Usually the Best Starting Point

A source URL normally identifies the public article more reliably than its headline. Editors change headlines after publication, translate them, add breaking-news labels and reuse recurring titles such as “Weekly Roundup.” The URL usually changes less often.

URL matching also has limitations. These links may all lead to the same story while looking different to a literal comparison:

https://publisher.example/story/
https://publisher.example/story/?utm_source=rss
https://publisher.example/story?output=1
http://publisher.example/story/
https://www.publisher.example/story/
https://short.example/a8K2

Do not assume an importer removes tracking parameters, follows every redirect before comparing, normalizes www, or treats HTTP and HTTPS as identical unless its documentation says so. Echo’s public listing describes source-URL fingerprinting but does not document every normalization step. Test the exact feed you will use.

Title checking is a useful secondary signal when one article reaches the site through more than one feed with different source URLs. It must be used carefully. Blocking every repeated title can discard valid recurring reports, event announcements, product releases or market updates. When false positives matter, import as Draft and treat a title match as a review signal rather than proof.

Common Duplicate Scenarios

ScenarioLikely result with URL checkingSafer response
The same item remains in the same feed with the same URLIt should be recognized and skippedConfirm by running the rule twice manually
The publisher changes only the titleThe existing source URL should still matchDecide whether to skip or update the existing post
The publisher changes the URLIt may appear to be a new itemReview redirects and use title checking where appropriate
Two feeds link to the same URLURL checking should catch it if the stored comparison is shared across the relevant rulesTest cross-rule behavior rather than assuming it
Two feeds publish the same story under different URLsURL checking alone may not catch itConsolidate sources, add title checking or send matches to review
The URL gains tracking parametersIt may be treated as different if comparison is literalPrefer a clean feed or normalize upstream where supported
A recurring column reuses the same titleTitle checking may block a legitimate new itemKeep URL as the primary identity
The source updates an existing itemA skip-only rule preserves the old imported versionUse the paid edition’s documented update-existing-post behavior when required
An imported post is manually deletedRe-import behavior depends on how history is storedTest deletion on staging before defining the editorial workflow

The last case is easy to overlook. An importer may remember the source item independently of the WordPress post, or it may use metadata on the post as its only record. Deleting, trashing or permanently removing an imported post can therefore produce different results. Test the exact edition and version before telling editors that deletion will or will not allow re-importing.

Echo Free or the Paid Edition?

Start with the free edition when the source feed is already known and returns usable HTML. Upgrade for a concrete missing capability, not because “paid” sounds inherently safer.

CapabilityEcho RSS Feed Post Generator FreeEcho RSS Feed Post Generator paid
Import RSS or Atom items as WordPress contentYesYes
Unlimited rulesYesYes
Unlimited posts per runYes; set the maximum to 0Yes
Source-URL duplicate fingerprintYesYes, with duplicate checking documented by title and/or URL
Scheduled and manual runsYesYes
Draft, pending, private or published statusYesYes
Full-content extractionYes, with automatic Readability and manual selector optionsYes
Featured-image and feed-media handlingYesYes
Filters, templates, categories, tags and custom fieldsYesYes
Feed discovery by keyword, URL or topicNoYes
JavaScript-rendered page extractionNoYes, through HeadlessBrowserAPI
Live external-feed display without creating postsNoYes
Convert generated content into native Gutenberg blocksNoYes
Deeply nested custom-tag mappingNoYes
Update an already imported post that remains in the feedNot presented as a Free-specific selling pointExplicitly documented on the paid listing

As checked on September 8, 2026, Echo Free on WPBay is version 4.9.6.2, updated September 7, and listed as tested with WordPress 7.1, PHP 8.5 and WooCommerce 11. Its page says there is no purchase-code step, no rule limit, no per-run post limit and no forced attribution.

The paid Echo listing is version 5.5.2, updated August 16, 2026, and listed as tested with WordPress 7.1 and PHP 8.5. WPBay’s marketplace review and maintenance data are useful release signals, but they are not substitutes for testing the source feeds, server scheduler, theme, SEO plugin and editorial workflow used by your site.

Step 1: Decide What You Are Allowed to Import

A public RSS URL is a machine-readable distribution method, not universal permission to republish every word and image commercially.

Use full-content imports for feeds you own, public-domain material, licensed sources, affiliates who authorize reuse, or partners with written syndication terms. For an ordinary third-party publication, a headline, short excerpt and clear source link is the safer default unless the publisher has granted broader rights.

Record the source owner, feed URL, permitted fields, image rights, attribution text, canonical/noindex agreement, update frequency and takedown contact before automating it. This is not bureaucratic overhead. It lets the team answer a source complaint without reverse-engineering months of generated posts.

Translation, synonym replacement or template variation does not turn copied material into material you own. Google’s current spam policies explicitly include scraping feeds and applying automated transformations such as synonymizing or translating when pages are generated at scale with little value for users. The problem is low-value scaled publishing, regardless of which tool produced it.

Step 2: Validate the Feed Before Connecting WordPress

Open the feed URL directly and confirm that it returns XML rather than an HTML error, login page, Cloudflare challenge or redirect loop. Inspect several items, not only the first one.

Use this preflight table:

CheckWhat a healthy feed should show
HTTP response200 OK without authentication or an anti-bot challenge
Feed typeRSS or Atom XML that a parser recognizes
Item identityA stable GUID/Atom ID and/or stable article link
DatesParseable publication or update dates in a consistent timezone
LinksDirect article URLs rather than one-time redirect or tracking links
ContentA usable summary or full-content field
ImagesMedia enclosure, content image or source page image you may legally reuse
FrequencyA publishing cadence that justifies the planned polling interval

If the same publisher offers several feeds, select the narrowest one that matches your project. Importing the site-wide feed and three category feeds creates overlapping input sets. Even strong duplicate protection then performs unnecessary requests and comparisons, while inconsistent URLs can still let the same story through.

Step 3: Install Echo Free or the Paid Plugin

Download the chosen ZIP from WPBay, then open Plugins > Add New Plugin > Upload Plugin in WordPress. Select the installable archive, install it and activate it.

Use a staging site for the first import. A feed rule can create many database records and Media Library attachments in one run, so “testing” directly on production can require a large cleanup even when the plugin itself behaves correctly.

After activation, open the Echo RSS Feed Post Generator menu. Echo Free turns its main switch on automatically. Before creating a rule, open Main Settings > Plugin Options, enable rule logging and detailed rule logging, then save. Detailed logging can grow, so use it during setup and troubleshooting, then choose a practical retention policy.

The free edition includes a system report under Activity & Logging > System Info. Check the PHP version, memory, cURL availability and timeouts. Its current documentation recommends at least 256 MB of PHP memory when full-content extraction is enabled. A summary-only feed import usually needs far fewer resources than fetching and parsing dozens of complete source pages and images.

Step 4: Create One Conservative Import Rule

Open RSS to Post Rules and fill the blank rule row. For the first run, use the following baseline:

Rule fieldFirst-test value
RSS Feed URLOne validated, direct feed URL
ScheduleLonger than the source’s normal publishing interval
Maximum posts3 to 5, not unlimited
Post statusDraft
Item typePost, or the intended custom post type after testing
AuthorA dedicated syndication/import user
ActiveEnabled only after the other fields are reviewed

Save the rule before running it. A dedicated import author makes auditing easier and prevents third-party feed author names from becoming unexpected WordPress user accounts. Assign one category such as Imported Review Queue so editors can find the test items immediately.

Do not begin with 0 unlimited imports. Echo Free supports that value, but it is appropriate after the rule is proven. A feed can expose years of history, and full-content extraction can turn one accidental click into hundreds of source-page requests and image downloads.

Step 5: Configure the Duplicate Identity

Echo Free fingerprints imported items by source URL. The paid product listing documents duplicate checks based on title and/or URL. Keep URL matching enabled as the principal control.

Use title matching when the feed environment makes it useful, such as overlapping feeds that publish the same article under different tracking URLs. Do not enable it blindly for sources that publish recurring headlines. If the plugin exposes a rule-level choice, select it per source instead of imposing one global identity policy on every feed.

Think of the choice as a tradeoff:

Identity modeStrengthFailure mode
URL onlyStable for most articles and resilient to headline editsMisses the same story when URLs differ
Title onlyCan catch copies exposed through different URLsBlocks unrelated posts with repeated titles and can fail after headline edits
URL and title as independent duplicate signalsBroadest duplicate suppressionHigher false-positive risk on recurring content
Source GUID/Atom IDIntended by feed standards to represent stable identityDepends on publisher quality and the importer’s implementation

The exact internal matching order is an implementation detail. Do not state that the plugin hashes, normalizes or resolves a field beyond what the current edition documents. The operational test in the next step is more valuable than a guessed explanation.

Step 6: Build a Minimal Post Template

For the first import, keep the generated title and content easy to inspect. A practical template is:

Title:
%%item_title%%

Content:
%%item_description%%

Source: %%item_url%%

Echo provides variables such as %%item_title%%, %%item_description%%, %%item_content%%, %%item_url%%, %%author%% and %%feed_title%%. Use the summary variable until you confirm that full-content extraction is authorized and reliable.

Keep the original source URL in the imported post even when the public title does not link directly to it. That visible relationship helps editors verify duplicates, correct facts and handle removal requests. Do not hide the source identity inside an internal log only.

Set comments, pingbacks and trackbacks according to the site policy. Automated imports rarely need pingbacks, and enabling comments on unreviewed syndicated drafts can create moderation work before the content is approved.

Step 7: Run the Same Rule Twice

Open the rule’s Actions menu and select Run This Rule Now. When it finishes, inspect Posts > All Posts and the Echo activity log.

The first run should create only the configured number of Draft posts. Check each source URL, title, author, category, publication date, content, image and character encoding. Confirm that the source feed itself did not contain duplicates.

Without editing the rule or deleting any post, run it again immediately.

The expected result is zero newly created posts for the same feed items. The log should show that known items were skipped or otherwise not inserted. This second run is the most important acceptance test in the tutorial. If it creates the same posts again, do not schedule the rule.

Use this diagnosis sequence when the second run fails:

ObservationLikely area to inspect
Source URLs differ only by query parametersFeed link stability and URL normalization behavior
Titles differ but URLs matchURL checking may be disabled or comparison metadata was not saved
URLs are identical but posts duplicateRule settings, import history, plugin version, database writes or concurrent runs
Only images duplicateMedia sideloading/retry behavior rather than post identity
Two rules create one copy eachDuplicate scope may be rule-specific; test and consolidate overlapping rules
Duplication appears only during scheduled runsOverlapping cron executions, timeouts or retry behavior

Keep the logs from both runs. A support request with the feed URL, plugin version, rule export, two timestamps and relevant log lines is far easier to diagnose than “it sometimes duplicates posts.” Remove credentials, cookies and private feed tokens before sharing logs.

Step 8: Test a Changed Source Item

Edit an item on a feed you control, or use a test feed where the title/content can be updated without changing the source URL. Run the rule again.

You now need to choose one of two valid policies.

Skip policy: Once an item has been imported, WordPress keeps its original snapshot. Later source changes do not overwrite editorial work. This is safer when an editor improves the local post after import.

Update policy: If the source item changes and remains in the feed, the corresponding WordPress post is refreshed. The paid Echo listing explicitly advertises updating posts that are already imported and still present in the feed. This is useful for product data, status pages, event schedules and sources where the remote publisher remains authoritative.

Do not mix these policies accidentally. An automatic update can erase local edits, while a skip-only policy can leave a time-sensitive fact stale. When local editing and source updates both matter, store imported material in dedicated fields or use a clear ownership boundary: the importer controls one section, and editors control another.

Step 9: Enable a Realistic Schedule

Set the polling interval based on how often the source actually publishes. Checking a weekly feed every five minutes does not make its articles newer. It creates more HTTP requests, cron activity, cache checks and log rows.

Echo Free supports hours or minutes and allows different schedules per rule. A reasonable starting matrix is:

Source patternStarting interval
Breaking operational alerts5–15 minutes, only with source permission and reliable server scheduling
Frequently updated news feed30–60 minutes
Normal publication or company blog2–6 hours
Daily or weekly partner content12–24 hours
Low-priority archive/reference feedManual or daily

WordPress’s own documentation explains that WP-Cron checks due tasks when a page loads; it does not run continuously. A low-traffic site may therefore execute a “10-minute” rule much later. High-traffic sites can also create contention when expensive imports are triggered through frontend requests.

Echo can use WP-Cron or a real server scheduler through a secret URL. For business-critical timing, call the documented URL from the host’s cron service and protect the secret. Do not expose it in public documentation, analytics, page source or a monitoring screenshot. Confirm that concurrent runs of the same rule are prevented and that a failed run releases its lock.

Step 10: Move from Draft to Production

Review several scheduled Draft batches before switching to automatic publication. The sample needs to include a source update, a source error, a post without an image, a title containing special characters, an old item, and a repeated run.

Use the filters to block material the site should never import. Echo supports required and banned keywords, title/content length boundaries, dates, image requirements, author/category filters and feed-specific matching. These are quality gates, not only content-selection conveniences. Rejecting an unsuitable item before media extraction and post insertion is cheaper than deleting it later.

When the results are consistent, choose one of three production modes:

ModeRecommended use
DraftThird-party sources, full-text imports, broad topics and anything requiring fact or rights review
Pending ReviewA formal editorial workflow where assigned users approve imported items
PublishFeeds you own, tightly controlled partner data or low-risk records proven through repeated testing

Automatic publishing should be the last change, not the first. Keep a low per-run cap for the initial production period so one changed feed cannot flood the site.

Preventing Duplicates Across Multiple Feeds

Single-feed deduplication is straightforward. Cross-feed deduplication is where real projects become difficult.

A publisher might place one article in /feed/, /category/security/feed/ and /author/editor/feed/. If every item uses exactly the same source URL and Echo checks across all imported posts, URL matching can suppress the overlap. If each feed adds different tracking parameters or aggregator URLs, the records may no longer match.

The strongest fix is input design: avoid overlapping feeds. Prefer one site-wide feed plus keyword/category filters inside Echo, or use only the category feed required for the project. Fewer sources reduce network work and simplify ownership.

When overlap is unavoidable, build a cross-feed test set. Import feed A, run feed B, then compare the expected and actual post count. Repeat with an article whose title changes and another whose URL redirects. If title matching is enabled, include two legitimate items with the same title to measure false positives.

Do not solve cross-feed duplication by silently discarding every similar headline. A similarity score or title match should route uncertain cases to review when the cost of losing a valid post is high.

Tracking Parameters and URL Normalization

Tracking parameters are a common reason one article looks new to an importer:

?utm_source=rss
?utm_medium=feed
?utm_campaign=weekly
?ref=partner
?output=1

Some parameters change only attribution; others change language, format, access or actual content. Removing every query string is unsafe. ?lang=de may identify a translated page, while ?output=amp may represent an alternate rendering. Normalize only parameters you understand and only through a supported rule, upstream proxy or feed transformation.

If you control the source, fix the feed there. Publish one clean permanent link and keep campaign tracking on the click/analytics layer rather than changing item identity on every feed request. Stable publisher data is more reliable than increasingly complex importer heuristics.

Avoiding Duplicate Media Attachments

Post deduplication can work while the Media Library still accumulates repeated images. A timeout may occur after the image is downloaded but before the import run records success. The retry then finds no completed post identity and downloads the file again.

During testing, compare attachment counts before and after the first and second runs. Search the Media Library for repeated filenames and check whether resized variants or optimizer conversions make one source image appear to be several files.

Choose whether to copy images locally. Local files avoid broken hotlinks and can pass through WordPress image optimization, but they consume storage and require image-reuse permission. Remote images reduce storage but depend on the source server, may be blocked, can disappear and can disclose visitor requests to a third party.

When imported posts are automatically deleted after a retention period, decide separately what happens to their attachments. Deleting a post does not always mean an attachment should be removed, because another post may reuse it. Test the plugin’s cleanup behavior and keep backups before bulk deletion.

Full-Content Extraction Without Duplicate Chaos

Echo Free can fetch the source article when the feed provides only a summary. Its bundled Readability workflow can attempt automatic extraction, while the Crawling Helper can identify a class, ID, XPath or regular expression for a specific site.

Full-content extraction adds three failure surfaces. The feed request can succeed while the article request fails. The article can return a bot challenge or JavaScript shell instead of content. The text can be extracted while its images fail. A retry must not create a second post simply because enrichment did not finish cleanly.

Start with Draft status and a low per-run maximum. Inspect navigation, newsletter forms, cookie notices, related-story cards, advertisements, scripts and invisible accessibility text. Target the smallest stable article container and strip elements that do not belong in the imported copy.

Use HeadlessBrowserAPI in the paid edition only when a permitted source genuinely requires JavaScript rendering. It is a separate hosted service and may require its own account or API credentials. A browser-based extraction path costs more time and resources than reading the feed or server-rendered HTML, so it should be a source-specific exception.

Canonical URLs, Noindex and Responsible Syndication

The paid Echo listing includes an option to add a rel="canonical" tag pointing to the source post. This can be useful for duplicate or very similar pages, but the correct indexation decision depends on the syndication agreement.

Google describes rel="canonical" as a strong signal, not an absolute directive. Its current canonicalization troubleshooting guidance goes further for syndicated content: when a publisher wants partner copies not to compete in search, Google says blocking indexing on the partner copy is more effective than relying on a cross-domain canonical because syndicated pages are often different overall.

Use this decision table:

Imported page typePractical indexation approach
Short excerpt that sends users to the sourceUsually index only if the page adds real navigation or editorial value; otherwise consider a live feed display or noindex
Licensed full copy with no meaningful local additionFollow the publisher agreement; noindex is the clearest way to prevent the copy competing in Google
Licensed copy with substantial original analysisA self-canonical may be reasonable if it is genuinely a distinct page, subject to the agreement
Internal monitoring/archive itemPrivate, Draft or noindex rather than publicly indexable
Content imported from your own site during migrationPrefer redirects or a migration plan instead of maintaining two public copies

Do not output two conflicting canonical tags. WordPress or an SEO plugin normally adds a self-referencing canonical to a published post. If Echo adds a source canonical as well, confirm that the integration replaces the local canonical rather than leaving both in <head>. Inspect the public HTML source and use Search Console’s URL Inspection report after publication.

Most importantly, canonical and noindex tags do not grant content or image rights. Permission comes first; indexation is a separate technical decision.

Why “Spin the Text” Is Not a Duplicate Strategy

Changing synonyms does not make two database records become one. It also does not transform an unauthorized copy into original reporting.

Echo contains translation, synonym and random-sentence tools because some licensed automation workflows need transformations. Use them for legitimate localization or controlled templates, not to disguise copied material. Google’s scaled-content policy explicitly names scraped feeds transformed through synonymizing, translating or other obfuscation when large numbers of low-value pages are created for rankings.

A valuable import adds something a reader cannot get from the source feed alone: curation, comparison, verified metadata, local context, structured categorization, commentary, alerts, a searchable internal archive or a workflow action. If the only purpose is to publish more URLs, perfect duplicate detection merely helps the site create low-value pages more efficiently.

Monitoring a Production Feed Rule

An RSS importer is a scheduled integration, not a one-time editor action. Monitor outcomes, not only whether cron fired.

MetricWhy it matters
Items fetchedReveals feed-size changes and empty responses
New posts createdConfirms useful output volume
Known items skippedShows duplicate prevention is active
Existing posts updatedSeparates refreshes from new insertions
Items rejected by filtersDetects an overly broad or overly strict rule
Full-content failuresIdentifies source layout or access changes
Image failuresReveals rights, hotlink, decoding and storage problems
Rule durationWarns about timeouts and growing workloads
Last successful runDetects silent scheduler failures

Echo provides activity logging and optional email summaries. During rollout, inspect every run. After the rule is stable, review daily or alert on failure, zero-item anomalies and unusual spikes. Clear old detailed logs on a retention schedule so diagnostics do not become a database-growth problem.

Use an external uptime or cron monitor for important feeds. A WordPress dashboard message cannot help when nobody logs in for a week.

Safe Audit Query for Existing Duplicate Titles

If a site already contains suspicious imports, the following read-only SQL query finds repeated titles. Replace wp_posts if the site uses another table prefix:

SELECT
    post_title,
    COUNT(*) AS copies,
    GROUP_CONCAT(ID ORDER BY ID) AS post_ids
FROM wp_posts
WHERE post_type = 'post'
  AND post_status NOT IN ('trash', 'auto-draft', 'inherit')
GROUP BY post_title
HAVING COUNT(*) > 1
ORDER BY copies DESC, post_title ASC;

Run it through a read-only database client or wp db query after taking a backup. The result is a candidate list, not a deletion list. Repeated titles can be legitimate. Compare each post’s source URL, publication date, content, import rule and attachments before changing anything.

Do not bulk-delete duplicates based on the highest or lowest ID without understanding the importer’s history. The retained post might be the one with comments, edits, canonical signals, backlinks or the correct featured image.

Moving from Echo Free to the Paid Edition

Echo Free’s current FAQ says both editions use the same echo_Main_Settings and echo_rules_list options, so the configuration is shared. It also says to run only one edition at a time.

Use a controlled upgrade:

StageAction
BackupSave the database, uploads and an exported Echo rule list
PauseDisable scheduled runs and confirm that no rule is currently executing
DeactivateDeactivate Echo Free without deleting its stored settings
InstallInstall and activate the paid edition
InspectConfirm rule URLs, schedules, duplicate settings, templates and post statuses
TestRun one rule with a one-post limit, then run it again
ResumeRe-enable schedules only after the second-run duplicate test passes

Do not keep both editions active to compare them. Shared settings and duplicate rule execution can make the result difficult to reason about.

Troubleshooting

ProblemMost likely checks
The same item is imported on every runConfirm URL duplicate checking, inspect whether source URLs change, preserve import metadata and check for concurrent rule execution
The same story arrives through two feedsRemove overlapping sources, compare URLs, test title checking and route uncertain matches to Draft
Valid new posts are skippedDisable title checking temporarily and look for recurring headlines or reused source URLs
No new posts are importedCheck feed response, rule Active state, date/keyword/image filters, maximum count, log and source URL history
Manual run works but the schedule does notInspect WP-Cron, low traffic, server cron, secret URL, time zone and stuck rule locks
Imported posts have only summariesEnable authorized full-content extraction and inspect the Readability/Crawling Helper settings
Full content contains navigation or popupsNarrow the selector and strip unwanted classes/IDs before publishing
Images are duplicatedTest media behavior separately, inspect retries and confirm whether local copying is required
Updated source content never changes locallyDecide whether the rule is skip-only and configure documented update behavior in the paid edition if appropriate
Canonical tags conflictInspect page source, SEO plugin output and Echo’s source-canonical setting
Imports stop during large runsLower the per-run maximum, increase schedule spacing, inspect memory/timeouts and avoid unlimited full-content jobs

Production Acceptance Test

TestPass condition
First manual runOnly the configured Draft posts are created
Immediate second runZero duplicate posts are created
Changed title, same URLExisting identity remains recognized according to the selected skip/update policy
Same title, different URLResult matches the deliberate title-check policy
Overlapping feedThe same story does not create an unexpected second post
Tracking-parameter variationBehavior is known and documented for that source
Source errorRetry does not create a second post or repeated attachment
Concurrent triggerOne rule run does not overlap itself
Scheduled runExecutes within the acceptable delay and produces logs
Full-content extractionCaptures only authorized article content without page furniture
Media handlingFiles are permitted, correctly attributed and not repeatedly downloaded
Public SEO outputExactly one intended canonical and the chosen indexation directive appear
CleanupTrashing/deleting an imported post has a tested, documented re-import result

Do not enable automatic publication until every relevant row has a known result.

Frequently Asked Questions

What is the easiest way to import an RSS feed into WordPress without duplicates?

Install Echo RSS Feed Post Generator Free, create one Draft rule for one feed, keep its source-URL fingerprinting active, limit the first run to a few posts, and run the identical rule twice. The second run should create nothing new for items already imported.

How does Echo prevent duplicate RSS posts?

The current Echo Free page says each imported item is fingerprinted by source URL. The paid Echo listing documents duplicate post checking based on title and/or URL. Exact normalization and comparison internals are not fully described on the public pages, so test the real feed before scheduling it.

Is URL or title duplicate checking better?

URL is the stronger default because headlines can change or repeat across legitimate articles. Title checking can catch the same story delivered under different URLs, but it can also reject valid recurring posts. Use URL first and title only where the source pattern justifies it.

Will an RSS GUID always prevent duplicates?

No. RSS <guid> is optional, and the feed publisher is responsible for keeping it stable and unique. Atom requires a permanent atom:id, but publishers and importers can still have implementation problems. A real importer needs a documented fallback such as source URL.

Can Echo Free import full articles?

Yes. Echo Free includes automatic full-content extraction with a Readability engine and manual targeting by class, ID, XPath or regular expression. Use it only for content you are permitted to reproduce, and keep the first runs in Draft status.

Does Echo Free limit rules or posts per run?

The current WPBay listing says it has no rule limit and no per-run post limit. Setting the rule’s maximum number of posts to 0 imports everything new that it finds. Use a small number during setup; unlimited is not a sensible first test.

When should I upgrade to Echo RSS Feed Post Generator paid?

Upgrade when you need feed discovery, JavaScript-rendered content through HeadlessBrowserAPI, live RSS display, Gutenberg-block conversion, nested tag mapping, or the paid edition’s documented update and advanced duplicate options. Normal feed-to-post importing is already covered by Free.

Can I run Echo Free and paid together?

Do not run both at the same time. Echo Free’s FAQ says the editions share the same main settings and rules-list options. Deactivate one before activating the other, then run a controlled duplicate test.

Does rel="canonical" make full-content importing safe?

No. It is a search signal, not copyright permission. Google may choose a different canonical, and Google currently recommends blocking indexing on a syndicated partner copy when the goal is to keep that copy from competing with the original. Obtain permission and define indexation separately.

Should imported posts be automatically published?

Only for a source you own or a tightly controlled partner feed after repeated tests. Draft or Pending Review is safer for third-party content, full-text extraction, broad keyword rules and sources whose markup can change.

Why does my scheduled import run late?

WP-Cron is triggered by page loads rather than running continuously. A quiet site may execute due tasks late. Use a server scheduler with Echo’s documented secret URL when timing matters, then monitor the last successful run.

Can translation or synonym replacement prevent duplicate content?

It may make text different, but it does not solve duplicate database records, grant reuse rights or guarantee search value. Google identifies scaled feed scraping with low-value automated transformation as a spam-policy risk.

What should I do if the site already contains duplicate imported posts?

Back up the site, identify candidate duplicates by title, then compare source URL, date, content, rule metadata, comments and attachments. Keep the correct record and redirect or remove the others through a deliberate cleanup plan. Never delete solely from a title query.

Final Recommendation

Reliable RSS importing is an identity problem before it is a scheduling problem. Start with one clean feed, one rule and one stable source URL per item. Import a small batch as Draft, run the same rule twice, test a changed item, test an overlapping source, and only then turn on automation.

For most sites, Echo RSS Feed Post Generator Free is enough to prove the workflow. It already provides unlimited rules, URL fingerprinting, manual and scheduled runs, filters, templates, full-content extraction, media handling and detailed logs without a purchase-code step.

Choose the paid Echo RSS Feed Post Generator when the project needs to find feeds automatically, render JavaScript-heavy source pages, display live feeds, create Gutenberg blocks, map nested tags or manage more advanced update and duplicate behavior.

Neither edition removes the publisher’s responsibilities. Import content you have the right to use, keep source attribution visible, choose canonical or noindex behavior intentionally, monitor every production rule, and add enough editorial value that the resulting site deserves the URLs it publishes.