For editing procedures, use Change your site’s name and author, Add or change a menu link or Edit footer links. The sections below describe site-wide options, defaults and integration settings.
Switching themes? Follow the migration guide. For a new site, start with the browser tutorial.
Appearance fields (googlefonts and chulapa-skin) have a separate
theming reference.
Start with your site details
Site identity uses title, description, locale, repository, url, baseurl
and the author mapping. The site-details how-to covers editing;
the tables below list the fields and defaults. url is the domain without the
repository path; baseurl is that path, or "" for a domain-root site.
A. Site settings/SEO
These are the main site details. Advanced search and sharing settings appear under Optional features and metadata.
| Setting | What to enter | Default |
|---|---|---|
title |
Your site’s name | GitHub repository name |
subtitle |
A short tagline, used in the home page browser title | GitHub project tagline |
description |
A brief description of your site | Used as home page metadata when no page description or excerpt is set |
locale |
Content language, such as en-GB, es or pt-BR |
en-US |
url |
Domain, such as https://ana.github.io |
GitHub metadata can supply it on GitHub Pages |
baseurl |
Website path, such as /my-blog, or "" at the domain root |
Supplied by the starter’s publishing setup |
repository |
GitHub username and repository, such as ana/my-blog |
Unset in the theme’s sample configuration |
title_separator |
Separator in browser titles | |, with spaces around it |
words_per_minute |
Reading speed for the estimated reading time | 200 |
timezone |
Your time zone; see Jekyll’s options | Jekyll’s configured time zone |
Pages can override locale. For social locale settings, page description
fallbacks and seo_title overrides, see SEO metadata
and Social locales and articles.
For custom builds, set url, baseurl and repository explicitly so page,
image and feed addresses resolve correctly.
Site author
author supplies the site-level name, profile and social links.
The site-details how-to covers changing the name.
author: Your name and profile details, shown where author information is enabled. Pages can supply their ownauthormapping.name: Author name. GitHub owner name, when GitHub metadata is available.url: Optional author profile URL or site-relative path, such as/about/. Use/about/to link to your own About page. For guest authors and advanced metadata rules, see page author options.avatar: Avatar image URL or site-relative path; a small square image is recommended.location: Location text linked to a Google Maps search.links: Social links withurl,iconandlabel. Use a Font Awesome icon code and a descriptive label. For email links, supply the plain email address.
Example site author:
author:
name: "Ana"
url: /about/
avatar: /assets/img/ana.jpg
location: "Madrid, Spain"
links:
- url: https://x.com/jack
icon: "fab fa-twitter"
label: "My personal Twitter/X"
- url: https://www.facebook.com
icon: "fab fa-facebook"
- url: hello@example.org
icon: far fa-envelope
label: "My personal email"
B. Navigation
Navbar
navbar defines the site’s menu. Entries in navbar.nav use title and url
for existing pages; child supplies one level of dropdown links. Styles are
classic (sticky top), fab (floating button) and dual (floating/classic at a breakpoint).
For an editing procedure, use Add or change a menu link. The options and examples below are the configuration reference.
For keyboard behavior of the development floating menu, see Keyboard navigation.
Check this live demo of the classic navbar style.
navbar:style: Usefabfor a floating action button ordualto switch styles at a breakpoint. Omit the setting for the classic navbar. classic.expand: Breakpoint for expanding the classic navbar or switching thedualnavbar from a floating button to a classic navbar. Usesm,md,lgorxl. For the classic navbar,alwayskeeps links expanded andneverkeeps them collapsed. Withdual,alwaysswitches atsmandneverswitches atxl. md.brand:title: Text to be displayed as the title of your navbar.img: An icon (ideally 30 × 30 px) displayed together with thetitle.url: Destination of the brand link. Site root URL.
nav: Links on your navbar. See the example to learn how to set one-level and two-level links:
navbar:
style : fab
brand:
title : Home
img: "./assets/img/site/brand-clear.png"
url: /someurl
nav:
- title: One-level link #Label
url: /url1/ #url
- title: Two-level link #Label
child:
- title: Second level first item
url: /url2-1
- title: Second level second item
url: /url2-2
- title: One-level link #Label
url: /url1/ #url
Footer
footer.links defines the contact, social and feed links below the page.
For an editing procedure, use Edit footer links.
footer:links:label: Label of your link.icon: Font Awesome icon code.url: Link URL or plain email address.
footer:
links:
- label: "RSS"
icon: "fa fa-rss"
url: "./atom.xml"
- label: "Twitter"
icon: "fab fa-twitter"
url: https://twitter.com/
- label: "Facebook"
icon: "fab fa-facebook"
url: https://www.facebook.com
footer.copyright supplies custom text or HTML. When omitted, the footer
shows the build year and site author name, falling back to the GitHub owner name:
footer:
copyright: "© 2021 <span class='chulapa'>Chulapa</span> developers"
Optional features and metadata
SEO (search engine optimization) and social metadata describe your pages to search engines and sharing services; they do not change your article text. The sections below list optional integration settings and their constraints.
SEO
These settings control social metadata and structured data. Chulapa generates
canonical URLs and JSON-LD for the home page (WebSite), posts (BlogPosting)
and other pages (WebPage). Breadcrumb structured data is generated even when
visible breadcrumbs are disabled.
og_image: The default image to be displayed when a page of your site is shared on any of the major social networks (Facebook, Twitter/X, etc.). The fallback order is pageog_image, pageheader_img, siteog_image, siteauthor.avatar, then the GitHub avatar. Article JSON-LD uses a separate selection; see Article images. Author avatar (if set, see below) or your GitHub avatar.twitter_site: The Twitter/X username without@used fortwitter:site. The separatetwitter:creatorvalue comes from a valid Twitter/X profile URL inauthor.links. When a page setsauthor, only that author’s links are considered fortwitter:creator; the site author is not used as a fallback. Status, sharing and other non-profile URLs do not set a creator.
Check your sharing metadata: Chulapa generates Open Graph and Twitter/X card tags automatically. For setup and published checks, use Set a post’s sharing text and images. Metadata does not guarantee a particular preview or search result.
Publisher
publisher identifies the site publisher in JSON-LD structured data,
independently of article authors. Supported since v2.1.0. For a personal-blog
editing procedure, use Identify a personal site’s publisher.
Organization mapping specimen:
publisher:
type: Organization
name: Example organization
logo: /assets/img/logo.png
Person mapping specimen:
publisher:
type: Person
name: Jane Doe
image: /assets/img/jane.jpg
| Setting | What to enter |
|---|---|
type |
Exactly Person or Organization. Default: Organization; unsupported values also use it. |
name |
Publisher name. Defaults to the site author or GitHub owner name. |
url |
Optional publisher website. Defaults to your site’s home page. |
logo |
Organization logo; ignored for Person. If omitted, uses the site’s sharing image or avatar. |
image |
Person’s photograph; defaults to the site author or GitHub avatar. Optional for an organization. |
Use a path such as /assets/img/logo.png for an uploaded image, or a complete
URL for an external one. No extra plugin is needed. These settings help describe
your site; they do not guarantee a special appearance in search results.
Font Awesome
Icons are available by default through Font Awesome 6. Use an icon from its
catalogue in your menu or footer settings.
To use your own Font Awesome kit, set fa_kit_code in _config.yml.
For older icons, fa_version: 5 selects version 5 and fa_v4_support: true
enables version 4 compatibility. When updating an old configuration, replace
fa5_kit_code with fa_kit_code; the old setting takes precedence if both exist.
Google Analytics
Setup: Enable Google Analytics 4.
| Setting | Value and behavior |
|---|---|
gtag_id |
GA4 measurement ID, such as G-XXXXXXXXXX. Omit it or leave its YAML value blank to disable its snippet. Loads when configured, including local preview. |
analytics_id |
Legacy Universal Analytics ID, for the retired service. Leave empty for new setups. Independent of gtag_id; both configured values load both snippets. |
Google Analytics and GoatCounter are independent. Setting either does not disable the other. Custom copies of a tracker are not removed automatically.
GoatCounter analytics
Available on main after v2.1.0; not in the v2.1.0 release.
Setup: Enable GoatCounter analytics.
| Setting | Value and behavior |
|---|---|
goatcounter |
Complete HTTPS counting address, such as https://YOUR-CODE.goatcounter.com/count or a self-hosted https://stats.example.org/count. Empty or non-HTTPS values disable it. |
The script is https://gc.zgo.at/count.js and loads only when
JEKYLL_ENV=production. No API key or extra Jekyll plugin is required.
The counting address is external; the site’s baseurl is not added to it.
This counts page views without cookies, a visible counter or custom-event configuration.
It does not disable the Google snippets.
Custom hosting and troubleshooting
See production builds and verification and missing visits for environment, Content Security Policy and browser-blocker checks. The GoatCounter documentation covers the service’s own behavior.
Search engines
search configures search within the site, independently of external search-engine
indexing. For crawler/sitemap/local-index exclusions, use
Keep an auxiliary page out of search.
The personal-blog template includes Fuse.js search. Setup instructions:
Enable Fuse.js, Lunr.js,
Simple-Jekyll-Search,
Google Custom Search or Algolia.
A search page uses layout: search; its permalink matches search.landing_page
(default /search). A provider does not create the page. In the classic navbar
and the desktop form of dual, the Search link also requires navbar.nav.
The search page remains reachable directly without that menu link.
The following engines are available:
Lunr, Fuse.js and Simple-Jekyll-Search use an index generated during the site
build. Set include_on_search: false on pages or in front matter defaults to
exclude them from these indexes. Algolia requires a separately uploaded index;
Google Custom Search requires a configured search engine.
search:provider: Select a search provider:lunr,algolia,google,simplesearch,fusejs.label: Text to be displayed on the navbar when enabled. Useful for localization (i.e. you can set it as Búsqueda or Ricerca). Search.landing_page: URL of your search page, useful for localization. “/search”.maxwords: Maximum number of content words per indexed document forsimplesearch,fusejsandlunr. Other indexed fields are separate. 30.show_attrib: Show attribution for Lunr, Fuse.js and Simple-Jekyll-Search. Set the YAML booleanfalseto hide it. true.algolia_logo: Independently controls the Algolia logo. Unset; the sample configurations explicitly set it totrue. Check your Algolia plan’s attribution requirements before hiding it.
google_cse_id: Your Google Custom Search id, available on cse.google.com > Your search engine > Settings.
The jekyll-algolia plugin is deprecated and no longer maintained by Algolia.
Its archived documentation remains available in the upstream repository.
The theme uses jekyll-algolia for index uploads. Browser search and index
upload are separate operations; the latter requires an indexing credential.
The browser search requires these settings:
algolia:application_id: App id on Algolia.index_name: Name of the index to search.search_only_api_key: Public search-only API key used in browser requests.
Index uploads require a separate indexing key supplied through the
ALGOLIA_API_KEY environment variable. Keep that key in your build environment
or GitHub Actions secrets; do not put it in the public configuration.
Additional Algolia indexing options in the sample configuration are
files_to_exclude (omit files), extensions_to_index (file types),
searchableAttributes (searchable fields) and customRanking (ranking rules).
They belong under algolia; they do not affect the local search providers.
include_on_search is not an Algolia exclusion: the sample customRanking
uses it for ranking. algolia.files_to_exclude controls omissions. These
settings do not restrict Google’s crawler or make published files private.
Configuration specimens: sample configuration and plugin option catalog. Setup and workflow steps: Connect Algolia search.
Legacy lunr_maxwords, simplesearch_maxwords and fusejs_maxwords take
precedence over the shared maxwords setting when present. Without those
provider-specific keys, the shared setting applies.
With the local search providers, visitors can search while typing or press Enter. Clearing the field clears the results.
Comments
Comments require a supported provider’s setup and show_comments: true on the
page or in front matter defaults for a layout that displays comments. Setup guides for one post:
giscus, Disqus,
Cactus, Welcomments or
an existing self-hosted Cusdis service.
Provider identifiers and compatibility constraints are listed below.
- Disqus, a hosted comment system.
- Cusdis, a lightweight comment system whose upstream project is deprecated and archived. The original hosted service is unavailable; check your own deployment before selecting this provider.
- giscus, powered by GitHub Discussions.
- Cactus, a federated comment system based on Matrix.
-
Welcomments, a comment integration using generated comment files.
comments:provider: Usedisqus,cusdis,giscus,cactusorwelcommentsto enable it.disqus_shortname: Disqus site identifier inhttps://DISQUS_SHORTNAME.disqus.com/admin/, not the display name.cusdis_app_id: Cusdis application ID, shown asdata-app-idin its embed code.cusdis_host: Cusdis HTTPS host base URL. Default:https://cusdis.com(the original hosted service is unavailable). Required for connecting your own deployment.cactus_shortname: Cactus only. The name you used to register this site with Cactus.website_id: Welcomments site id. Requires a separately configured integration delivering comment data under_data/welcomments/; setting the ID alone does not deliver data.
Cactus uses the Cactus-hosted Matrix service; there is no configurable homeserver
field in this adapter. In development after v2.1.0, conversation IDs URL-encode
page.url and encode underscores as %5F; they exclude the forbidden / and _.
The v2.1.0 adapter retains slashes. Its setup guide includes a legacy local
correction and migration checks: changing IDs does not move existing threads. Comment-provider selection does not migrate comments,
and thread matching depends on the provider and page identifiers/addresses.
For giscus, _includes/custom/giscus.html contains the embed script generated
by giscus setup, including repository and category identifiers.
In development after v2.1.0, the Cactus script and stylesheet load only on
pages with show_comments: true. Selecting the provider alone no longer loads
these resources on every page.
In v2.1.1-dev, the Cusdis adapter accepts resize messages only from its own iframe and requires a finite, nonnegative numeric height. Existing provider settings are unchanged.
Welcomments compatibility: in development after v2.1.0, form permalinks
include baseurl. The v2.1.0 form omits it; project sites on that release need
the local correction in the setup guide. Local _includes/welcomments/ files override
the theme templates. Provider-generated templates can replace the customized
ones supplied by Chulapa. The
setup guide covers reviewing those integration files.
D. Jekyll defaults and collections
Advanced configuration. A collection groups content such as portfolio projects; defaults apply shared page settings without repeating them in each file. The starter already configures these for a blog.
Collection, pagination and front matter default settings are defined by Jekyll: see its documentation on collections, pagination and front matter defaults.
The pagination template in Chulapa also uses:
paginator_maxnum: Numbered page links in the pagination window when using the blog pagination template. The template clamps the value to at least 2 and at most the total number of pages. First/last and previous/next controls are separate. 3.
See a sample defaults configuration here.
XX. Other settings
The jekyll-include-cache plugin is required; removing it breaks includes that
use include_cached.
The sample configuration includes this repository’s demo collections and pagination settings; these are examples rather than requirements for every site.
The following settings belong to Jekyll or its plugins. Keep the starter’s values unless you need to change how files are built or published.
| Setting | Use |
|---|---|
github |
Keep [metadata] in the sample setup to supply GitHub repository details. |
theme, remote_theme |
Choose the gem or remote installation method; see Installation. |
plugins |
Enabled build plugins, including the required jekyll-include-cache. |
include, exclude |
Files or folders to explicitly publish or omit; include: [_pages] enables the starter’s pages folder. |
collections |
Content groups; use output: true and a permalink pattern to publish their documents. |
collections_dir |
Parent folder for collections; an empty value keeps them at the site root. |
defaults |
Shared settings: scope.path and optional scope.type select files; values supplies their options. |
permalink |
Default address pattern for posts; individual pages can set their own address. |
paginate, paginate_path |
Posts per page and address pattern for a paginated blog index. |
markdown, highlighter |
Content converters; the sample uses kramdown and rouge. |
excerpt_separator |
Text marking the end of a post excerpt; the sample uses a blank line ("\n\n"). |
lsi |
Jekyll’s optional related-post calculation; the sample disables it. It does not configure the theme’s tag-based related cards. |
incremental |
Rebuild only changed files during development; the sample disables it. |
kramdown |
Markdown behavior, detailed below. |
sass |
Stylesheet build settings, detailed below. |
compress_html |
Optional HTML compression, detailed below. |
Under kramdown, the sample settings are:
| Option | Use |
|---|---|
input |
Markdown dialect (GFM in the sample). |
hard_wrap |
Whether ordinary line breaks become visible breaks. |
auto_ids |
Automatically name headings for links and tables of contents. |
footnote_nr, footnote_backlink |
First footnote number and the return-link symbol. |
entity_output |
How special characters are written in generated HTML. |
toc_levels |
Heading levels included by kramdown’s own table of contents. |
smart_quotes |
Opening and closing quote characters. |
enable_coderay |
Legacy code-highlighter integration; disabled in the sample. |
Under sass, sass_dir names the source folder, style controls CSS output,
quiet_deps suppresses dependency warnings and silence_deprecations lists
warning types to suppress. The last two depend on the installed Sass converter;
they do not fix deprecated stylesheet code.
Under compress_html, the sample uses clippings: all and blanklines: true.
Other options are optional; leaving them unset disables the corresponding step:
| Option | Use |
|---|---|
clippings |
Trim spaces around selected HTML elements; use a list or all. |
blanklines |
Remove empty lines while retaining line breaks; otherwise whitespace is collapsed. |
comments |
Remove HTML comments (all) or comments between a pair of supplied markers. |
endings |
Omit selected optional closing tags; use a list or all. |
startings |
Omit selected optional opening tags; supply a list. |
ignore.envs |
Skip compression in listed environments, or use all to skip it everywhere. |
profile |
Display compression statistics; leave disabled on a published site. |
See Jekyll’s configuration reference and the compression guide for accepted values.