h-feed: Difference between revisions

From Microformats Wiki
Jump to navigation Jump to search
No edit summary
(→‎See Also: drop h-feed-issues while it doesn't exist. we have a github repo for issues now)
(26 intermediate revisions by 7 users not shown)
Line 1: Line 1:
HOW THING OUT
{{DISPLAYTITLE:h-feed}}
HOW ANYTHING OUT
 
HOW EVERYTHING OUT
<span class="h-card vcard"><span class="p-name fn">[[User:Tantek|Tantek Çelik]]</span> (<span class="p-role role">Editor</span>)</span>
HOW UNIVERSE OUT
----
HOW MAKE THING OUT
<dfn style="font-style:normal;font-weight:bold">h-feed</dfn> is a simple, open format for publishing a stream or feed of [[h-entry]] posts, like complete posts on a home page or archive pages, or summaries or other brief lists of posts. h-feed is one of several open [[microformats|microformat]] draft standards suitable for embedding data in HTML.
HOW MAKE ANYTHING OUT
 
HOW MAKE EVERYTHING OUT
h-feed is the [[microformats2]] update to [[hAtom]], and in particular its "hfeed" root class.
HOW MAKE UNIVERSE OUT
 
HOW THING BE OUT
{{cc0-owfa-license}}
HOW ANYTHING BE OUT
 
HOW EVERYTHING BE OUT
== Properties ==
HOW UNIVERSE BE OUT
h-feed properties, inside an element with class '''h-feed'''. All properties are optional.
HOW MAKE THING BE OUT
 
HOW MAKE ANYTHING BE OUT
root class name: h-feed
HOW MAKE EVERYTHING BE OUT
 
HOW MAKE UNIVERSE BE OUT
=== Core Properties ===
HOW THING OUT
The following ''core'' h-feed properties have broad consensus:
HOW ANYTHING OUT
* '''<code>p-name</code>''' - name of the feed
HOW EVERYTHING OUT
* '''<code>p-author</code>''' - author of the feed, optionally embed an [[h-card]] {{main|h-card}}
HOW UNIVERSE OUT
* '''<code>u-url</code>''' - URL of the feed
HOW MAKE THING OUT
* '''<code>u-photo</code>''' - representative photo / icon for the feed
HOW MAKE ANYTHING OUT
 
HOW MAKE EVERYTHING OUT
children:
HOW MAKE UNIVERSE OUT
* nested [[h-entry]] objects representing the items of the feed
HOW THING BE OUT
 
HOW ANYTHING BE OUT
=== Draft Properties ===
HOW EVERYTHING BE OUT
None currently.
HOW UNIVERSE BE OUT
 
HOW MAKE THING BE OUT
=== Proposed Properties ===
HOW MAKE ANYTHING BE OUT
The following properties are proposed additions based on various observed examples in the wild, but are awaiting at least one reader / real world consuming code example to become a draft property:
HOW MAKE EVERYTHING BE OUT
* '''<code>p-summary</code>''' - based on non-trivial actual content usage of "atom:subtitle" on Blogger and WordPress.com featured blogs's Atom feeds.
HOW MAKE UNIVERSE BE OUT
* '''<code>p-entry</code>''' - to be more consistent with the cascading of p-author or [http://microformats.org/wiki/comment-brainstorming#Proposal p-comment].
HOW THING OUT
 
HOW ANYTHING OUT
== Status ==
HOW EVERYTHING OUT
'''h-feed''' is a microformats.org draft specification. Public discussion on h-feed takes place on:
HOW UNIVERSE OUT
* https://github.com/microformats/h-feed/issues and
HOW MAKE THING OUT
* the #microformats [[irc]] channel on irc.freenode.net.
HOW MAKE ANYTHING OUT
 
HOW MAKE EVERYTHING OUT
h-feed is ready to use and implemented in the wild, but for backwards compatibility you should also mark h-feed up as a classic [[hAtom]] "hfeed".
HOW MAKE UNIVERSE OUT
 
HOW THING BE OUT
== Use Cases ==
HOW ANYTHING BE OUT
* Named feeds
HOW EVERYTHING BE OUT
** IndieWeb Readers are consuming home page feeds marked up with h-feed and using the name of the h-feed in their user interfce.
HOW UNIVERSE BE OUT
 
HOW MAKE THING BE OUT
* Generate an Atom feed
HOW MAKE ANYTHING BE OUT
** This seems like a legacy use-case, not sufficient to actually justify h-feed.
HOW MAKE EVERYTHING BE OUT
 
HOW MAKE UNIVERSE BE OUT
* Feed per channel of content - needs a name
HOW THING OUT
** "I will have a feed per tag (channel) so I want to name them." - Sandeep Shetty in #indiewebcamp
HOW ANYTHING OUT
** It appears there is some desire to create separate feeds for an indieweb site for separate subsets of content, and name them <em>explicitly</em> accordingly. This presents a need for a container object for the h-entry elements, where the container itself can have a name. This is a potential interesting use-case for an explicit 'h-feed'.
HOW EVERYTHING OUT
 
HOW UNIVERSE OUT
== Examples in the wild ==
HOW MAKE THING OUT
Add any examples in the wild that you find to the top of this list.
HOW MAKE ANYTHING OUT
* ...
HOW MAKE EVERYTHING OUT
* http://sandeep.io/ uses h-feed with p-name and p-author properties and child h-entry posts. In particular using h-feed on the &lt;html&gt; element allows using p-name on the &lt;title&gt; element and re-using the visible window title of the HTML page as the name of the feed, neatly avoiding a [[DRY]] violation.
HOW MAKE UNIVERSE OUT
* ...
HOW THING BE OUT
 
HOW ANYTHING BE OUT
See https://indieweb.org/h-feed#IndieWeb_Examples for many more examples of h-feed in the wild.
HOW EVERYTHING BE OUT
 
HOW UNIVERSE BE OUT
== Implementations ==
HOW MAKE THING BE OUT
=== Readers ===
HOW MAKE ANYTHING BE OUT
* [https://github.com/kylewm/woodwind Woodwind]
HOW MAKE EVERYTHING BE OUT
* [https://github.com/barnabywalters/shrewdness Shrewdness]
HOW MAKE UNIVERSE BE OUT
 
HOW THING OUT
=== Proxies ===
HOW ANYTHING OUT
* Bridgy
HOW EVERYTHING OUT
 
HOW UNIVERSE OUT
=== Converters ===
HOW MAKE THING OUT
* '''[http://unmung.com unmung]''' - will transform an RSS or Atom feed into an [[h-feed]] containing h-entries
HOW MAKE ANYTHING OUT
 
HOW MAKE EVERYTHING OUT
== Backward Compatibility ==
HOW MAKE UNIVERSE OUT
=== Publisher Compatibility ===
HOW THING BE OUT
For backward compatibility, you may wish to use classic [[hAtom]] classnames in addition to the more future-proof h-feed properties, for example:
HOW ANYTHING BE OUT
 
HOW EVERYTHING BE OUT
<source lang=html4strict>
HOW UNIVERSE BE OUT
<div class="h-feed hfeed">
HOW MAKE THING BE OUT
  <h1 class="p-name site-title">The Markup Blog</h1>
HOW MAKE ANYTHING BE OUT
  <p class="p-summary site-description">Stories of elements of their attributes.</p>
HOW MAKE EVERYTHING BE OUT
 
HOW MAKE UNIVERSE BE OUT
  <article class="h-entry hentry">
HOW THING OUT
    <a class="u-url" rel="bookmark" href="2020/06/22/balanced-divisive-complementary">
HOW ANYTHING OUT
      <h2 class="p-name entry-title">A Tale Of Two Tags: Part 2</h2>
HOW EVERYTHING OUT
    </a>
HOW UNIVERSE OUT
    <address class="p-author author h-card vcard">
HOW MAKE THING OUT
      <a href="https://chandra.example.com/" class="u-url url p-name fn" rel="author">Chandra</a>
HOW MAKE ANYTHING OUT
    </address>
HOW MAKE EVERYTHING OUT
    <time class="dt-published published" datetime="2012-06-22T09:45:57-07:00">June 21, 2012</time>
HOW MAKE UNIVERSE OUT
    <div class="p-summary entry-summary">
HOW THING BE OUT
      <p>From balanced harmony, to divisive misunderstandings, to complementary roles.</p>
HOW ANYTHING BE OUT
    </div>
HOW EVERYTHING BE OUT
    <a href="/category/uncategorized/" rel="category tag" class="p-category">General</a>
HOW UNIVERSE BE OUT
  </article>
HOW MAKE THING BE OUT
 
HOW MAKE ANYTHING BE OUT
  <article class="h-entry hentry">
HOW MAKE EVERYTHING BE OUT
    <a class="u-url" rel="bookmark" href="2020/06/20/best-visible-alternative-invisible">
HOW MAKE UNIVERSE BE OUT
      <h2 class="p-name entry-title">A Tale Of Two Tags: Part 1</h2>
HOW THING OUT
    </a>
HOW ANYTHING OUT
    <address class="p-author author h-card vcard">
HOW EVERYTHING OUT
      <a href="https://chandra.example.com/" class="u-url url p-name fn" rel="author">Chandra</a>
HOW UNIVERSE OUT
    </address>
HOW MAKE THING OUT
    <time class="dt-published published" datetime="2012-06-20T08:34:46-07:00">June 20, 2012</time>
HOW MAKE ANYTHING OUT
    <div class="p-summary entry-summary">
HOW MAKE EVERYTHING OUT
      <p>It was the best of visible tags, it was the alternative invisible tags.</p>
HOW MAKE UNIVERSE OUT
    </div>
HOW THING BE OUT
    <a href="/category/uncategorized/" rel="category tag" class="p-category">General</a>
HOW ANYTHING BE OUT
  </article>
HOW EVERYTHING BE OUT
 
HOW UNIVERSE BE OUT
</div>
HOW MAKE THING BE OUT
</source>
HOW MAKE ANYTHING BE OUT
 
HOW MAKE EVERYTHING BE OUT
{{note|Note: you may use any valid HTML5 elements. The <code>article h1 h2 address time</code> elements are used in the example as semantically richer suggestions, however in general <code>div span</code> work fine too. The <code>time</code> element is special though in that its <code>datetime</code> attribute provides a more author/user friendly way of separating a machine readable ISO8601 datetime from a human readable summary.
HOW MAKE UNIVERSE BE OUT
}}
HOW THING OUT
 
HOW ANYTHING OUT
The class '''<code>hfeed</code>''' is a ''backward compatible root class name'' that indicates the presence of an [[hAtom]] feed.
HOW EVERYTHING OUT
 
HOW UNIVERSE OUT
Backward compatibility hAtom property class names and rel values are listed below.
HOW MAKE THING OUT
 
HOW MAKE ANYTHING OUT
=== Parser Compatibility ===
HOW MAKE EVERYTHING OUT
Microformats parsers {{should}} detect classic properties only if a classic root class name is found and parse them as microformats2 properties.
HOW MAKE UNIVERSE OUT
 
HOW THING BE OUT
If an "h-feed" is found, don't look for an "hfeed" on the same element.
HOW ANYTHING BE OUT
 
HOW EVERYTHING BE OUT
Compat root class name: <code id="hfeed">hfeed</code><br/>
HOW UNIVERSE BE OUT
Properties: (parsed as '''p-''' plain text unless otherwise specified):
HOW MAKE THING BE OUT
 
HOW MAKE ANYTHING BE OUT
(this section is a stub and needs review and citations to note what real world examples would each of these backcompat parsing rules actually help parse)
HOW MAKE EVERYTHING BE OUT
 
HOW MAKE UNIVERSE BE OUT
* <code>rel=tag</code> - parse as '''<code>p-category</code>'''. While not a class name nor typical microformats property, rel=tag was the defined way to tag an hfeed. Thus parsers should look for rel=tag hyperlinks inside an hfeed, and take the last path segment of their "href" value as a value for a '''<code>p-category</code>''' property.
HOW THING OUT
* <code>site-title</code> - parse as '''<code>p-name</code>''' [WordPress (Core? Typical themes?) has this class name by default, and without it buggy parsers may imply p-name as the whole h-feed ([http://microformats.org/wiki/microformats2-parsing#parsing_for_implied_properties implied properties only apply to actual h-x roots, not backcompat]).]
HOW ANYTHING OUT
* <code>site-description</code> - parse as '''<code>p-summary</code>''' [WordPress (Core? Typical themes?) has this class name by default]
HOW EVERYTHING OUT
 
HOW UNIVERSE OUT
If no "h-feed" nor "hfeed" element is found, however multiple top-level [[h-entry]] elements (explicit or backcompat) are found, implementations may use:
HOW MAKE THING OUT
* top level [[h-entry]] elements as items in a synthetic h-feed.
HOW MAKE ANYTHING OUT
* <code>&lt;title&gt;</code> of the page or the URL of the page as '''<code>p-name</code>'''
HOW MAKE EVERYTHING OUT
* https://indieweb.org/authorship on the page to discover default authorship for any h-entry posts lacking explicit parsed <code>author</code> properties.
HOW MAKE UNIVERSE OUT
 
HOW THING BE OUT
== FAQ ==
HOW ANYTHING BE OUT
=== How do I avoid duplicating the page title ===
HOW EVERYTHING BE OUT
''I want to use the name (title) of my page as the name of my feed, how do I avoid duplicating the page title somewhere invisibly on the page as the feed name?''
HOW UNIVERSE BE OUT
 
HOW MAKE THING BE OUT
If you want re-use the &lt;title&gt; of your page as the name of your feed, you can do so by putting the h-feed root class name on the &lt;html&gt; element, and the p-name property class name on the &lt;title&gt; element, e.g. here's a snippet showing how those tags would look:
HOW MAKE ANYTHING BE OUT
<source lang=html4strict>
HOW MAKE EVERYTHING BE OUT
<html class="h-feed">
HOW MAKE UNIVERSE BE OUT
  …
HOW THING OUT
  <title class="p-name">The Markup Blog</title>
HOW ANYTHING OUT
  …
HOW EVERYTHING OUT
</source>
HOW UNIVERSE OUT
 
HOW MAKE THING OUT
=== What should a subscriber do with a page with multiple feeds ===
HOW MAKE ANYTHING OUT
''What do I do when a user subscribes to a URL with multiple distinct h-feeds?''
HOW MAKE EVERYTHING OUT
 
HOW MAKE UNIVERSE OUT
A feed reader should subscribe to the first h-feed it finds at a URL.
HOW THING BE OUT
 
HOW ANYTHING BE OUT
Related: http://indiewebcamp.com/reader
HOW EVERYTHING BE OUT
 
HOW UNIVERSE BE OUT
== See Also ==
HOW MAKE THING BE OUT
* [[h-entry]]
HOW MAKE ANYTHING BE OUT
* [[microformats2]]
HOW MAKE EVERYTHING BE OUT
* [[hAtom]]
HOW MAKE UNIVERSE BE OUT
 
HOW THING OUT
[[Category:Draft Specifications]]
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT
HOW THING OUT
HOW ANYTHING OUT
HOW EVERYTHING OUT
HOW UNIVERSE OUT
HOW MAKE THING OUT
HOW MAKE ANYTHING OUT
HOW MAKE EVERYTHING OUT
HOW MAKE UNIVERSE OUT
HOW THING BE OUT
HOW ANYTHING BE OUT
HOW EVERYTHING BE OUT
HOW UNIVERSE BE OUT
HOW MAKE THING BE OUT
HOW MAKE ANYTHING BE OUT
HOW MAKE EVERYTHING BE OUT
HOW MAKE UNIVERSE BE OUT

Revision as of 21:20, 1 February 2021


Tantek Çelik (Editor)


h-feed is a simple, open format for publishing a stream or feed of h-entry posts, like complete posts on a home page or archive pages, or summaries or other brief lists of posts. h-feed is one of several open microformat draft standards suitable for embedding data in HTML.

h-feed is the microformats2 update to hAtom, and in particular its "hfeed" root class.

Per CC0, to the extent possible under law, the editors have waived all copyright and related or neighboring rights to this work. In addition, as of 2024-05-04, the editors have made this specification available under the Open Web Foundation Agreement Version 1.0.

Properties

h-feed properties, inside an element with class h-feed. All properties are optional.

root class name: h-feed

Core Properties

The following core h-feed properties have broad consensus:

  • p-name - name of the feed
  • p-author - author of the feed, optionally embed an h-card
    Main article: h-card
  • u-url - URL of the feed
  • u-photo - representative photo / icon for the feed

children:

  • nested h-entry objects representing the items of the feed

Draft Properties

None currently.

Proposed Properties

The following properties are proposed additions based on various observed examples in the wild, but are awaiting at least one reader / real world consuming code example to become a draft property:

  • p-summary - based on non-trivial actual content usage of "atom:subtitle" on Blogger and WordPress.com featured blogs's Atom feeds.
  • p-entry - to be more consistent with the cascading of p-author or p-comment.

Status

h-feed is a microformats.org draft specification. Public discussion on h-feed takes place on:

h-feed is ready to use and implemented in the wild, but for backwards compatibility you should also mark h-feed up as a classic hAtom "hfeed".

Use Cases

  • Named feeds
    • IndieWeb Readers are consuming home page feeds marked up with h-feed and using the name of the h-feed in their user interfce.
  • Generate an Atom feed
    • This seems like a legacy use-case, not sufficient to actually justify h-feed.
  • Feed per channel of content - needs a name
    • "I will have a feed per tag (channel) so I want to name them." - Sandeep Shetty in #indiewebcamp
    • It appears there is some desire to create separate feeds for an indieweb site for separate subsets of content, and name them explicitly accordingly. This presents a need for a container object for the h-entry elements, where the container itself can have a name. This is a potential interesting use-case for an explicit 'h-feed'.

Examples in the wild

Add any examples in the wild that you find to the top of this list.

  • ...
  • http://sandeep.io/ uses h-feed with p-name and p-author properties and child h-entry posts. In particular using h-feed on the <html> element allows using p-name on the <title> element and re-using the visible window title of the HTML page as the name of the feed, neatly avoiding a DRY violation.
  • ...

See https://indieweb.org/h-feed#IndieWeb_Examples for many more examples of h-feed in the wild.

Implementations

Readers

Proxies

  • Bridgy

Converters

  • unmung - will transform an RSS or Atom feed into an h-feed containing h-entries

Backward Compatibility

Publisher Compatibility

For backward compatibility, you may wish to use classic hAtom classnames in addition to the more future-proof h-feed properties, for example:

<div class="h-feed hfeed">
  <h1 class="p-name site-title">The Markup Blog</h1>
  <p class="p-summary site-description">Stories of elements of their attributes.</p>

  <article class="h-entry hentry">
    <a class="u-url" rel="bookmark" href="2020/06/22/balanced-divisive-complementary">
      <h2 class="p-name entry-title">A Tale Of Two Tags: Part 2</h2>
    </a>
    <address class="p-author author h-card vcard">
      <a href="https://chandra.example.com/" class="u-url url p-name fn" rel="author">Chandra</a>
    </address>
    <time class="dt-published published" datetime="2012-06-22T09:45:57-07:00">June 21, 2012</time>
    <div class="p-summary entry-summary">
      <p>From balanced harmony, to divisive misunderstandings, to complementary roles.</p>
    </div>
    <a href="/category/uncategorized/" rel="category tag" class="p-category">General</a>
  </article>

  <article class="h-entry hentry">
    <a class="u-url" rel="bookmark" href="2020/06/20/best-visible-alternative-invisible">
      <h2 class="p-name entry-title">A Tale Of Two Tags: Part 1</h2>
    </a>
    <address class="p-author author h-card vcard">
      <a href="https://chandra.example.com/" class="u-url url p-name fn" rel="author">Chandra</a>
    </address>
    <time class="dt-published published" datetime="2012-06-20T08:34:46-07:00">June 20, 2012</time>
    <div class="p-summary entry-summary">
      <p>It was the best of visible tags, it was the alternative invisible tags.</p>
    </div>
    <a href="/category/uncategorized/" rel="category tag" class="p-category">General</a>
  </article>

</div>
ℹ️ Note: Note: you may use any valid HTML5 elements. The article h1 h2 address time elements are used in the example as semantically richer suggestions, however in general div span work fine too. The time element is special though in that its datetime attribute provides a more author/user friendly way of separating a machine readable ISO8601 datetime from a human readable summary.

The class hfeed is a backward compatible root class name that indicates the presence of an hAtom feed.

Backward compatibility hAtom property class names and rel values are listed below.

Parser Compatibility

Microformats parsers SHOULD detect classic properties only if a classic root class name is found and parse them as microformats2 properties.

If an "h-feed" is found, don't look for an "hfeed" on the same element.

Compat root class name: hfeed
Properties: (parsed as p- plain text unless otherwise specified):

(this section is a stub and needs review and citations to note what real world examples would each of these backcompat parsing rules actually help parse)

  • rel=tag - parse as p-category. While not a class name nor typical microformats property, rel=tag was the defined way to tag an hfeed. Thus parsers should look for rel=tag hyperlinks inside an hfeed, and take the last path segment of their "href" value as a value for a p-category property.
  • site-title - parse as p-name [WordPress (Core? Typical themes?) has this class name by default, and without it buggy parsers may imply p-name as the whole h-feed (implied properties only apply to actual h-x roots, not backcompat).]
  • site-description - parse as p-summary [WordPress (Core? Typical themes?) has this class name by default]

If no "h-feed" nor "hfeed" element is found, however multiple top-level h-entry elements (explicit or backcompat) are found, implementations may use:

  • top level h-entry elements as items in a synthetic h-feed.
  • <title> of the page or the URL of the page as p-name
  • https://indieweb.org/authorship on the page to discover default authorship for any h-entry posts lacking explicit parsed author properties.

FAQ

How do I avoid duplicating the page title

I want to use the name (title) of my page as the name of my feed, how do I avoid duplicating the page title somewhere invisibly on the page as the feed name?

If you want re-use the <title> of your page as the name of your feed, you can do so by putting the h-feed root class name on the <html> element, and the p-name property class name on the <title> element, e.g. here's a snippet showing how those tags would look:

<html class="h-feed"><title class="p-name">The Markup Blog</title>

What should a subscriber do with a page with multiple feeds

What do I do when a user subscribes to a URL with multiple distinct h-feeds?

A feed reader should subscribe to the first h-feed it finds at a URL.

Related: http://indiewebcamp.com/reader

See Also