1. headful
Set <head> properties (e.g. title and meta tags) from JavaScript.
headful
Package: headful
Created by: troxler
Last modified: Wed, 04 May 2022 19:37:37 GMT
Version: 1.0.3
License: MIT
Downloads: 7,809
Repository: https://github.com/troxler/headful

Install

npm install headful
yarn add headful

Headful

Headful is a small JavaScript library to set properties in the HTML <head> (for example <title> and meta tags).

Important:
Most properties supported by Headful are only useful when they are set before the browser executes the JavaScript.
For example, you won't be able to change properties used for URL sharing on social networks (e.g. Facebook, Twitter) or messengers (WhatsApp, Telegram).
That means you should either prerender your pages before the deployment or use server-side rendering.

PS: Are you using Vue.js? Then you should checkout vue-headful instead.

Install

npm i headful

Usage

 import headful from 'headful';

headful({
    title: 'Title from Headful',
    description: 'Description from Headful',
});

Note that Headful does not add missing HTML elements, it only adds attribute values.
So it is important that you add everything that you want to have populated in your HTML first.

 <!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta itemprop="name">
    <meta property="og:title">
    <meta name="twitter:title">
    <meta name="description"/>
    <meta itemprop="description">
    <meta property="og:description">
    <meta name="twitter:description">
    <script src="script.js"></script>
</head>
<body>
<!-- ... -->
</body>
</html>

Documentation

Headful supports several different head properties.
Below you can find a list of Headful properties and for each of them which elements they populate.

For more information on everything you can put into <head>, have a look at https://gethead.info/.

 import headful from 'headful';

headful({
    title: '',
    // * <title>
    // * <meta itemprop="name">
    // * <meta property="og:title">
    // * <meta name="twitter:title">

    description: '',
    // * <meta name="description">
    // * <meta itemprop="description">
    // * <meta property="og:description">
    // * <meta name="twitter:description">

    keywords: '',
    // string or array
    // * <meta name="keywords">

    image: '',
    // * <meta itemprop="image">
    // * <meta property="og:image">
    // * <meta name="twitter:image">

    lang: '',
    // * <html lang>
    // * <meta property="og:locale"> - only for language codes like ll-CC

    ogLocale: '',
    // * <meta property="og:locale">
    
    url: '',
    // <link rel="canonical">
    // <meta property="og:url">
    // <meta name="twitter:url">
    
    html: {
        selector1: {attr1: 'val1', attr2: 'val2'},
        selector2: {attr1: 'val1', attr2: 'val2'},
    },
    // add/change arbitrary attributes on elements in the overall document using CSS selectors

    head: {
        selector1: {attr1: 'val1', attr2: 'val2'},
        selector2: {attr1: 'val1', attr2: 'val2'},
    },
    // add/change arbitrary attributes on elements within the <head> using CSS selectors

});

Note that are some head properties that can be specified with different Headful property names (e.g. <meta property="og:locale">).
There is always one Headful property that tries to set as many head properties as possible (e.g. lang).
But if you also specify another conflicting Headful property (e.g. ogLocale), then the more specific one will win.
See the example below.

 headful({
    // Sets <html lang="en-GB"> and <meta property="og:locale" content="en_GB">
    lang: 'en-GB',
});


headful({
    // Sets <html lang="en-AU"> and does not change <meta property="og:locale"> as we also specify 'ogLocale'
    lang: 'en-AU',

    // Sets <meta property="og:locale" content="en_GB"> only
    ogLocale: 'en_GB',
});

If you want to remove a previously defined attribute from an element, you can set it to null or undefined as in the example below:

 headful({ title: 'Headful' });
// <title>Headful</title>
// <meta itemprop="name" content="Headful">
// <meta property="og:title" content="Headful">
// <meta name="twitter:title" content="Headful">

headful({ title: null });
// <title></title>
// <meta itemprop="name">
// <meta property="og:title">
// <meta name="twitter:title">

Compatibility

Headful works with every current and most reasonably old web browsers including:

  • Firefox 34+
  • Chrome 45+
  • Edge
  • Safari 9+

If you need to support even more browsers (including Internet Explorer), you have to add a polyfill for
Object.assign
(e.g. with core-js).
When you do that, the following browsers are supported:

  • Firefox 4+
  • Chrome 5+
  • Edge
  • Safari 5+
  • Internet Explorer 9+

Extensions

RELATED POST

Enhancing Vue.js Development: Harnessing the Potential of Vue-Loader

Enhancing Vue.js Development: Harnessing the Potential of Vue-Loader

Simplify Data Validation in Vue.js: A Step-by-Step Guide to Using Regex

Simplify Data Validation in Vue.js: A Step-by-Step Guide to Using Regex

Troubleshooting Made Easy: Common Issues and Solutions with vue-loader Without vue-cli

Troubleshooting Made Easy: Common Issues and Solutions with vue-loader Without vue-cli

Optimizing Webpack 4 with Vue CLI 3: Disabling the Cache-Loader

Optimizing Webpack 4 with Vue CLI 3: Disabling the Cache-Loader

Step-by-Step Guide: How to Add a Function to Your Vuex Plugin

Step-by-Step Guide: How to Add a Function to Your Vuex Plugin