How does Marfeel detect the Author and Byline of an article?

An Author refers to the person responsible for creating a piece of content like an article, a blog post or any other form of written material. Normally matches the Author that created the content on the CMS.

A Byline is the public text that acknowledges and identifies the author(s) responsible for creating an article. Normally matches the public byline as informed on the structure data.

An Author may have multiple bylines for different reasons:

  1. Pseudonyms or pen names: Some authors may write under a pseudonym or pen name, either for personal reasons or to maintain separation between different areas of their work. In such cases, they could have multiple bylines associated with their different pen names.
  2. Variations in name representation: An author’s name may be represented differently across various publications or platforms

As an example, the Author John Smith might publish articles using these different bylines:

  1. John Smith
  2. JS
  3. J.S.
  4. John S.
  5. J. Smith
  6. Generic Editorial byline

How does Marfeel detect Bylines?

Marfeel auto-tracks article bylines using the following heuristics waterfall:

  1. JSON+LD (For more details visit author - Schema.org Property)
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "NewsArticle",
      "author": [
        {
          "@type":"Person",
          "name":"Author One"
        },
        {
          "@type":"Person",
          "name":"Author Two"
        }
      ]
    }
    </script>
    
    <script type="application/ld+json">
    {
      "author": "Author One"
    }
    </script>
    
  2. Meta tag “article:author”
    <meta property="article:author" content="Author One">
    
  3. Meta tag name=“author”
    <meta name="author" content="Author One">
    
  4. Property rel=“author”. This only applies on editorials with a publication date.
    <a href="https://domain.com/author-one/" rel="author">Author One</a>
    

How does Marfeel detect Authors?

To track the Author that created an article you can use the mrf:authors meta tag. By default, if mrf:authors is not explicitly informed, the field is automatically populated with the Byline value.

<meta property="mrf:authors" content="Author 1" />

You can list as many authors as necessary with semicolons:

<meta property="mrf:authors" content="Author 1;Author 2;Author 3" />

From the Marfeel’s User Profile page, users can associate an Author to a Marfeel user account, which allows the platform to track content contributions and manage permissions accordingly.

Encrypting Authors & Sections

While declaring real Authors behind a byline might be a good recommendation from an SEO and EAT perspective there might be strategic situations where you don’t want to openly expose the Author behind a byline but you still want to be able to track the Author on Marfeel.

For these situations Marfeel supports encrypted Authors and Sections. When Authors and Sections are declared as encrypted the real values will only be visible by Marfeel.

Declaration

Both mrf:authors and mrf:sections meta can specify encrypted:true:

<meta property="mrf:authors"  encrypted="true" content="AiqpEJ+VdfIm9dlXeRND6RD+IdMBF=" >
<meta property="mrf:sections"  encrypted="true" content="AiqpEJ+VdfIm9dlXeRND6RD+IdMBF

How to cipher Authors and Sections

Publishers can cipher sections and authors using an asymmetric RSA cipher. You can encrypt your text using Public-Key Cryptography Standards(PKCS) with the Padding Scheme Optimal Asymmetric Encryption Padding(OAEP) and transform the result into a base64 string. More info.

Marfeel Public RSA Key

Publishers can cipher the values with the Public RSA Marfeel Key:

-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3TXGyYwHoNN1erI/UKPDudVAQhSV+mguc0aYjMWXj6ck98gSP/8Kaum/etDqkkLFhE075T+PH4zkNUsAgT+ZhnzbCQQJKGSWQa5oJEuokX+tD+x2kyvnGZtJQboIDhBU1h3MEgQlkXZmbiBNm0gobX0Hw9CoZHk0NPbjSP19PQFMF0gvVJKLp24MFjSzsS6R27H0a88HmChy0fiO5ClrBDKCAek5d/ZA5tVzV7X1ERqGYTHY912vM9/M4GggdrJycZrvKq9ZZF6FiccQfEOoWBvMcPhYXEle+D+5rjepryvCsChXcouwCfI2gWTkjFrQhzPHoriUiQ485UEebbk2T+JC3hsT3uZl2PjnQb5l6PAG+M33FVai1hCp39YNny6X1a+vE3wW9K8g6mJO7B4s4Lx/Pa45Epmd4vajMqskKKWCXumg7Yoru+steI8M7jn39NJ+gmzpmaOR0NDrxDlZfK5zG5D0cL//wB9f1WnpkYBvxVKS2V/O02UQU9c/w9tls9uHFJWnIOSKLA81xSX1LdkcdVTa5SAPll/RsRiyAJAnYYiM95t/dmFEYAK9NPw43wbu8+7NiQLQYxwV8/mDhRZkLw35xc0YxTkwxZjBYah8AFWmYS3nXhe0O3WvIkH/h6TR5DZLh4omic8U4YRorGLFmRav31PCT0YZFg3P/o0CAwEAAQ==
-----END PUBLIC KEY-----

Cipher Code examples

Here’s a cipher example in PHP:

public function encrypt(string $data): string
{
    $oOpenSSLAsymmetricKey = openssl_get_publickey($this->publicKey);
    if (openssl_public_encrypt($data, $encrypted, $oOpenSSLAsymmetricKey, OPENSSL_PKCS1_OAEP_PADDING)) {
        $data = base64_encode($encrypted);
    } else {
        throw new \Exception('Unable to encrypt data');
    }

    return $data;
}

Here’s a cipher example in Node:

const NodeRSA = require('node-rsa');

const encrypt = async (data) => {
    const clientKey = new NodeRSA(RSA_PUBLIC_KEY);
    clientKey.setOptions({encryptionScheme: 'pkcs1_oaep'});
    
    return clientKey.encrypt(data, 'base64');
};

How to cipher

Marfeel will extract all the information before ## as the data. For example, to cipher an article with authors John Doe and Fred Doe you would declare:

<meta property="mrf:authors" content="John Doe;Fred Doe">
Important: Use always a different random value after ## so the same author doesn't get the same encrypted value on all its articles.

Ciphering the values you should insert the result of calling encrypt("John Doe;Fred Doe##random data") into the meta tag content attribute and add the attribute encrypted=“true” to it:

<meta property="mrf:authors"  encrypted="true" content="AiqpEJ+VdfIm9dlXeRND6RD+IdMBFyH0jhyXRrmUc20OxGHTBDG+xeSxx2uBkbBGmwYkiUttP/JvV69eAE2FX1lUCInFC9IFgy6X1Me9RkJeWLp5+gcg6zeaumb69uFvugPWwLwoORiXUN2LXilnV1l8GTokpXGuPaKXrYp+E1cLTDfkP/TmCu3pDK3EIFa6PuZb9r30nvNj3RutFLkEn4DHmXK9O7H/ghAtGEogg6kTHdin9ys21U+rhX1MwGr7qUiKeqYLIaLsTgX/AGgaIGB6418Ad7Wxqz549THt/xEY5wY/RhfzZc+BSoqggbhmAqw31xHiXpF0Ibbs28j+ObF6rI6stxSRGnwobBDr15c4fE2B/ybJgsCkYsF7Wx3BHpGIyfSyNZlYM1FQtKYcWwp5rd6eyGZlV35HVKwTtFanof/oVjUW7SWXuhVCJgmGVEDH/mlUACel0IkqQIQjBFeoH6LEV3/0W/zIJNFwulCe9B7fB1vbW4RfdzTyQQdK1tEQ5Y6NEKTeFKu/GEgThzssaZHF4/DLjzUt0jAaXyos773GCiuoOMAm4zGKmYw/UrQNvbLXxm7wdcszQDIxuqqFmdz0qFfAzioKKPPP1XNQRReiHZejui4n4ubSM0F02rExPJJSklQSOEcIKhbW9G76XVkM/vy/iNYCvYrkcII=">