As you might have noticed, I’ve added dates on pages like About, mainly because of schemas. However, even when date is added to the front matter, the following snippet in _layouts/page.html does not work at all:

<time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time>

If the above is used, Jekyll shows the following error message:

Invalid Date: '' is not a valid datetime.
Liquid Exception: exit in _layouts/page.html

However, using {{ page.date }} directly displays the information as expected. After a lot of trial and error, I found a workaround:

{% capture pubDate %}{{ page.date }}{% endcapture %}
<time datetime="{{ pubDate | date_to_xmlschema }}" itemprop="datePublished">{{ pubdate | date: "%b %-d, %Y" }}</time>

The following also works:

<time datetime="{{ page['date'] | date_to_xmlschema }}" itemprop="datePublished">{{ page['date'] | date: "%b %-d, %Y" }}</time>

This might be related to how the following doesn’t work in Jekyll plugins:

Jekyll::Hooks.register :pages, :post_write do |document|
  print document.date
end

While the following works fine:

Jekyll::Hooks.register :pages, :post_write do |document|
  print document['date']
end

However, I do not know why this is the case. After all, this seems a bit unintuitive, and does not seem to be well-documented.