{"id":85,"date":"2017-02-23T13:19:24","date_gmt":"2017-02-23T13:19:24","guid":{"rendered":"http:\/\/feeder.co\/help\/?p=85"},"modified":"2021-03-25T14:07:02","modified_gmt":"2021-03-25T14:07:02","slug":"validate-my-rss-file","status":"publish","type":"post","link":"https:\/\/feeder.co\/help\/website-owners\/validate-my-rss-file\/","title":{"rendered":"Validate my RSS file"},"content":{"rendered":"<p>To secure a good user experience for the users that subscribes to your RSS feed, you need to make sure it validates. RSS is a standard just like HTML and CSS and irregular markup can cause problems now or in the future. RSS aggregators like <a href=\"http:\/\/feeder.co\">feeder.co<\/a> strive to be as consistent as possible. We have made the decision to try to stay as pragmatic towards feeds as possible. If a feed is not 100% according to the specification, we try anyway.<\/p>\n<p>There are multiple services on the web you can use to validate your RSS or Atom feed. The canonical service is made by the <a href=\"https:\/\/w3.org\">W3C<\/a>\u00a0and called the <a href=\"https:\/\/validator.w3.org\/feed\/\">Feed Validation Service.<\/a><\/p>\n<h3>Common pitfalls<\/h3>\n<h4>Date format<\/h4>\n<p>There are a lot of different formats for dates out in the wild. Different regions use different standards and don&#8217;t always mix well. The RSS standard <a href=\"http:\/\/asg.web.cmu.edu\/rfc\/rfc822.html\">RFC822<\/a> format looks like this: <code>Thu, 23 Feb 2017 14:03:01 GMT<\/code> Most programming languages provide a standard package to output dates in this format. For example:<\/p>\n<p>PHP: <code>echo date(DATE_RFC822);<\/code><br \/>Go: <code>print(time.Now().Format(time.RFC822))<\/code><br \/>Ruby: <code>DateTime.now.rfc822<\/code><\/p>\n<h4>Not including a GUID<\/h4>\n<p>The <code>&lt;guid&gt;<\/code> element is a fantastic way for you as website owner to make the RSS aggregator&#8217;s lives simpler. The GUID is a globally unique identifier, that can be anything. Just make sure it&#8217;s unique. A large complexity for RSS parsers is to detect new posts that weren&#8217;t there on a previous crawl. If no GUID is available we go off the title and the posted date. However, if any of those change we will mark it as a new post and our users will be annoyed because they probably already saw that post.<\/p>\n<h4>Changing something causing all posts to look new<\/h4>\n<p>In the same vein as the previous point, if you for example change time zone on the server and all timestamps are changed with +1 hours or so, a feed reader might think the posts are new. Keep in mind these points if you were to migrate any time in the future.<\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To secure a good user experience for the users that subscribes to your RSS feed, you need to make sure it validates. RSS is a standard just like HTML and CSS and irregular markup can cause problems now or in the future. RSS aggregators like feeder.co strive to be as consistent as possible. We have [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[],"yst_prominent_words":[],"class_list":["post-85","post","type-post","status-publish","format-standard","hentry","category-website-owners"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p893aM-1n","_links":{"self":[{"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/posts\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/comments?post=85"}],"version-history":[{"count":1,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":928,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/posts\/85\/revisions\/928"}],"wp:attachment":[{"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/media?parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/categories?post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/tags?post=85"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/feeder.co\/help\/wp-json\/wp\/v2\/yst_prominent_words?post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}