MediaWiki extensions manual
WikiSEO
Release status: stable
Implementation Parser function
Description Allows to add common meta elements as part of Search Engine Optimization (SEO)
Author(s) Octfxtalk
Latest version 2.6.6 (2023-01-23)
MediaWiki 1.39+
PHP 7.4+
Composer octfx/wiki-seo
License GNU General Public License 2.0 or later
Download
Parameters
  • $wgWikiSeoSocialImageShowAuthor
  • $wgFacebookAdmins
  • $wgWikiSeoSocialImageShowLogo
  • $wgPinterestSiteVerificationKey
  • $wgMetadataGenerators
  • $wgGoogleSiteVerificationKey
  • $wgFacebookAppId
  • $wgWikiSeoSocialImageHeight
  • $wgBingSiteVerificationKey
  • $wgTwitterCardType
  • $wgWikiSeoSocialImageBackgroundColor
  • $wgYandexSiteVerificationKey
  • $wgWikiSeoEnableSocialImages
  • $wgWikiSeoTryCleanAutoDescription
  • $wgWikiSeoDefaultImage
  • $wgNortonSiteVerificationKey
  • $wgTwitterSiteHandle
  • $wgWikiSeoDefaultLanguage
  • $wgWikiSeoSocialImageWidth
  • $wgWikiSeoEnableAutoDescription
  • $wgWikiSeoOverwritePageImage
  • $wgNaverSiteVerificationKey
  • $wgWikiSeoSocialImageIcon
  • $wgWikiSeoNoindexPageTitles
  • $wgAlexaSiteVerificationKey
  • $wgWikiSeoDisableLogoFallbackImage
  • $wgWikiSeoSocialImageTextColor
Hooks used
  • BeforePageDisplay
  • InfoAction
  • ParserFirstCallInit
  • RevisionDataUpdates
  • ScribuntoExternalLibraries
Hooks provided
  • WikiSEOPreAddMetadata
  • WikiSEOPreAddPageProps
  • WikiSEOLuaPreAddPageProps
Quarterly downloads 118 (Ranked 75th)
Translate the WikiSEO extension if it is available at translatewiki.net
Issues Open tasks · Report a bug

The WikiSEO extension allows you to replace, append or prepend the HTML title tag content. It also allows you to add common SEO (Search Engine Optimization) meta elements such as "keywords" and "description".

A working job queue is absolutely required for this extension to function.

Installation

  • Download and place the file(s) in a directory called WikiSEO in your extensions/ folder.
  • Add the following code at the bottom of your LocalSettings.php file:
    wfLoadExtension( 'WikiSEO' );
    
  • Configure as required.
  • Yes Done – Navigate to Special:Version on your wiki to verify that the extension is successfully installed.

Usage

The extension can be used via the {{#seo}} parser function or in Lua modules by using mw.ext.seo.set(). It accepts the following named parameters in any order.

Globally supported parameter names
Name Default Description Example Supported Generators
title(empty)The title you want to appear in the html title tag. Will also be used for OpenGraph, Schema.org and Twitter metadata.
{{#seo:|title=This is the title of the page}}
All
title_modereplaceSet to append, prepend, or replace (default) to define how the title will be amended. Further examples can be found here.
{{#seo:|title=This replaces the Title of the Page|title_mode=replace}}
All
title_separator - The separator in case title_mode was set to append or prepend.
{{#seo:|title=This gets prepended to the page name separated by the separator|title_mode=prepend|title_separator=<<}}
All
keywords(empty)A comma separated list of keywords describing the page content. Will also be used for OpenGraph, Schema.org and Twitter metadata.
{{#seo:|keywords=Apple, Pears, Oranges}}
All
description(empty)A short text describing the page topic. Will also be used for OpenGraph, Schema.org and Twitter metadata.
{{#seo:|description=This page contains information about...}}
All
Supported parameter names by the Metatag generator
Name Default Description Example Supported Generators
robots(empty)Controls the behavior of search engine crawling and indexing
{{#seo:|robots=noindex, nofollow}}
Metatag
googlebot(empty)Controls the behavior of the google crawler
{{#seo:|googlebot=noindex, nofollow}}
Metatag
hreflang_xx-xx(empty)Adds <link rel="alternate" href="url" hreflang="xx-xx"> elements
{{#seo:|hreflang_de-de=https://example.com}}
Metatag
Supported parameter names by the OpenGraph / Twitter generator
NameDefaultDescriptionExampleSupported Generators
type(empty)The type of your object, e.g., "video.movie". Depending on the type you specify, other properties may also be required.
{{#seo:|type=website}}
OpenGraph / Twitter
image(empty)An image URL which should represent your object within the graph.
The extension will automatically add the right image url, width and height if an image name is set as the parameter. Example image = Local_file_to_use.png.
Alternatively a full url to an image can be used, image_width and image_height will then have to be set manually.
If no parameter is set, the extension will use $wgLogo as a fallback or the local file set through $wgWikiSeoDefaultImage.
{{#seo:|image=Local_File.png}}
OpenGraph / Twitter
image_width(empty)The image width in px. (Automatically set if an image name is set in image)
{{#seo:|image_width=420}}
OpenGraph / Twitter
image_height(empty)The image height in px. (Automatically set if an image name is set in image)
{{#seo:|image_height=69}}
OpenGraph / Twitter
image_alt(empty)A short sentence describing the image
{{#seo:|image_alt=A picture showing an orange cat.}}
OpenGraph / Twitter
locale(empty)The locale these tags are marked up in. Of the format language_TERRITORY.
{{#seo:|locale=en-US}}
OpenGraph / Twitter
site_name(empty)If your object is part of a larger web site, the name which should be displayed for the overall site. e.g., "IMDb".
{{#seo:|site_name=WMF}}
OpenGraph / Twitter
Supported parameter names by the OpenGraph with type=article [1]
NameDefaultDescriptionExampleSupported Generators
author(empty)Writers of the article.
{{#seo:|author=Jon Doe}}
OpenGraph (article)
section(empty)A high-level section name. E.g. Technology
{{#seo:|section=Technology}}
OpenGraph (article)
published_time(empty)When the article was first published. ISO 8601 Format.
{{#seo:|published_time=2012-01-25}}
OpenGraph (article)
Supported parameter names by the Twitter generator (see OpenGraph Tags)[2]
NameDefaultDescriptionExampleSupported Generators
twitter_site(empty)If you did not set a global site name through $wgTwitterSiteHandle, you can set a site handle per page. If a global site handle is set this key will be ignored.
{{#seo:|twitter_site=MediaWiki}}
Twitter
Supported parameter names by the Citation generator[3]
NameDefaultDescriptionExampleSupported Generators
citation_typeScholarlyArticleUsed in @graph @type
{{#seo:|citation_type=MedicalScholarlyArticle}}
Citation
citation_name(empty)Name of the Publication
{{#seo:|citation_name=Cataloging & Classification Quarterly}}
Citation
citation_headline(empty)Headline of the article.
{{#seo:|citation_headline=Works in Cataloging}}
Citation
citation_date_published(empty)Date of first broadcast/publication.
{{#seo:|citation_date_published=2012-01-01}}
Citation
citation_date_created(empty)The date on which the CreativeWork was created or the item was added to a DataFeed.
{{#seo:|citation_date_created=2012-01-01}}
Citation
citation_page_start(empty)The page on which the work starts; for example "135" or "xiii".
{{#seo:|citation_page_start=135}}
Citation
citation_doi(empty)URL of a reference Web page that unambiguously indicates the item's identity. E.g. the URL of the item's Wikipedia page, Wikidata entry, or official website.
{{#seo:|citation_doi=http://dx.doi.org/10.1038/nphys1170}}
Citation
citation_author(empty)One or more authors separated by ';'
{{#seo:|citation_author=Doe, John; Bar, Foo}}
Citation
citation_publisher(empty)Name of the publisher
{{#seo:|citation_journal_title=Elsevir}}
Citation
citation_license(empty)A license document that applies to this content, typically indicated by URL.
{{#seo:|citation_license=link}}
Citation
citation_volume(empty)Volume number
{{#seo:|citation_volume=50}}
Citation
keywords(empty)Article Keywords
{{#seo:|citation_keywords=Keyword a; Keyword b; ...}}
All
description(empty)A description of the item.
{{#seo:|description=An article about cataloging}}
All

Do note that the Citation generator is not activated by default! To activate the generator add the following snippet to LocalSettings.php:

$wgMetadataGenerators[] = "Citation";

Examples

Adding static values

{{#seo:
|title=Your page title
|title_mode=append
|keywords=these,are,your,keywords
|description=Your meta description
|image=Uploaded_file.png
|image_alt=Wiki Logo
}}

Adding dynamic values

If you need to include variables or templates you should use the parser function to ensure they are properly parsed. This allows you to use Cargo or Semantic MediaWiki, with Page Forms, for data entry, or for programmatic creation of a page title from existing variables or content...

{{#seo:
 |title={{#if: {{{page_title|}}} | {{{page_title}}} | Welcome to WikiSEO}}
 |title_mode={{{title_mode|}}}
 |keywords={{{keywords|}}}
 |description={{{description|}}}
 |published_time={{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}
}}
{{#seo:
 |title_mode=append
 |title=Example SEO Wiki
 |keywords=WikiSEO, SEO, MediaWiki
 |description=An example description for this wiki
 |image=Wiki_Logo.png
 |image_alt=Wiki Logo
 |site_name=Example SEO Wiki
 |locale=en_EN
 |type=website
 |modified_time={{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}
 |published_time=2020-11-01
}}

Usage in lua modules

-- Module:SEO
local seo = {}

--[[
argTable format:
{
  title_mode = 'append',
  title = 'Example Seo Wiki',
  keywords = 'WikiSEO, SEO, MediaWiki',
  -- ...
}
]]--
function seo.set( argTable )
  mw.ext.seo.set( argTable )
end

function seo.setStatic()
  mw.ext.seo.set{
    title_mode = 'append',
    title = 'Example Seo Wiki',
    keywords = 'WikiSEO, SEO, MediaWiki',  
  }
end

return seo

The module would now be callable as {{#invoke:SEO|set|title=ExampleTitle|keywords=WikiSEO, SEO, MediaWiki}} or {{#invoke:SEO|setStatic}}.

Hreflang Attributes

{{#seo:
 |hreflang_de-de=https://example.de/page
 |hreflang_nl-nl=https://example.nl/page-nl
 |hreflang_en-us=https://website.com/
}}

Will generate the following <link> elements:

<link rel="alternate" href="https://example.de/page" hreflang="de-de">
<link rel="alternate" href="https://example.nl/page-nl" hreflang="nl-nl">
<link rel="alternate" href="https://website.com/" hreflang="en-us">

Title Modes

Example: Page with title Example Page

Append

{{#seo:
 |title_mode=append
 |title=Appended Title
}}

HTML Title result: Example Page - Appended Title

Prepend

{{#seo:
 |title_mode=prepend
 |title=Prepended Title
}}

HTML Title result: Prepended Title - Example Page

Prepend (changed separator)

{{#seo:
 |title_mode=prepend
 |title=Prepended Title
 |title_separator= >> 
}}

HTML Title result: Prepended Title >> Example Page

Replace (default)

{{#seo:
 |title_mode=replace
 |title=Replaced Title
}}

HTML Title result: Replaced Title

Maintenance Script

WikiSEO provides a maintenance script to generate descriptions for specified pages. This script requires Extension:TextExtracts to be installed and active. The script will only generate descriptions for pages that don't have a description property set in the page properties table.

You can force the generation using the --force flag, this will overwrite any description already present.

A list of namespace ids needs to be given in order for the script to work:

# Run only in main namespace
php maintenance/GenerateDescription.php 0

# Run only in main namespace and overwrite existing descriptions
php maintenance/GenerateDescription.php --force 0

# Run in namespace 1234, overwrite descriptions and remove dangling sentences
php maintenance/GenerateDescription.php --force --cleanSentence 1234

Configuration

The following variables are in use by this extension.

Site / App Keys
Variable Description Usage
$wgGoogleSiteVerificationKeySetting this variable will add a `<meta name="google-site-verification" content="CODE">` tag to every page.$wgGoogleSiteVerificationKey = 'CODE';
$wgBingSiteVerificationKeySetting this variable will add a `<meta name="msvalidate.01" content="CODE">` tag to every page.$wgBingSiteVerificationKey= 'CODE';
$wgFacebookAppIDSetting this variable will add a `<meta property="fb:app_id" content="ID">` tag to every page.$wgFacebookAppID= 'App_ID';
$wgFacebookAdminsSetting this variable will add a `<meta property="fb:admins" content="ID1,ID2,...">` tag to every page.$wgFacebookAdmins= 'ID1,ID2,...';
$wgYandexSiteVerificationKeySetting this variable will add a `<meta name="yandex-verification" content="CODE">` tag to every page.$wgYandexSiteVerificationKey= 'CODE';
$wgAlexaSiteVerificationKeySetting this variable will add a `<meta name="alexaVerifyID" content="CODE">` tag to every page.$wgAlexaSiteVerificationKey= 'CODE';
$wgPinterestSiteVerificationKeySetting this variable will add a `<meta name="p:domain_verify" content="CODE">` tag to every page.$wgPinterestSiteVerificationKey= 'CODE';
$wgNortonSiteVerificationKeySetting this variable will add a `<meta name="norton-safeweb-site-verification" content="CODE">` tag to every page.$wgNortonSiteVerificationKey= 'CODE';
$wgNaverSiteVerificationKeySetting this variable will add a `<meta name="naver-site-verification" content="CODE">` tag to every page.$wgNaverSiteVerificationKey = 'CODE';

$wgWikiSeoDefaultImage

Set a default image to use if no image is set on the site. If this variable is not set the site's logo will be used.

Usage: $wgWikiSeoDefaultImage= 'Localfile.jpg';.

$wgMetadataGenerators

Array containing the metadata generator names to load.

Default: ["OpenGraph", "Twitter", "SchemaOrg"].

If you only want to change the page title and add 'description', 'keywords', 'robots' tags set $wgMetadataGenerators = [];

$wgWikiSeoDisableLogoFallbackImage

Disable setting $wgLogo as a fallback image if no image for a page was set.

$wgTwitterCardType

Defaults to `summary_large_image` for the twitter card type.

Usage: $wgTwitterCardType = 'summary';

$wgWikiSeoNoindexPageTitles

An array of page titles where a 'noindex' robot tag should be added. Usage: $wgWikiSeoNoindexPageTitles = [ 'Custom_Title', 'Main_Page' ];

$wgWikiSeoDefaultLanguage

A default language code with area to generate a <link rel="alternate" href="current Url" hreflang="xx-xx"> for.

Usage: $wgWikiSeoDefaultLanguage = 'de-de';

$wgWikiSeoEnableAutoDescription

If no description was given in the parser function, a short description from Extension:TextExtracts will be requested. A description will only be set, if the page is edited and saved. Alternatively the maintenance script GenerateDescription can be run from the extension folder.

$wgWikiSeoTryCleanAutoDescription

Tries to remove dangling sentences from the description provided by TextExtracts. This will remove the last sentence not ending in a '.', and will result in descriptions shorter than 160 characters.

Social Media Images
Variable Description Usage
$wgWikiSeoEnableSocialImagesGenerate dedicated social media icons for pages$wgWikiSeoEnableSocialImages = true;
$wgWikiSeoSocialImageIconThe icon/watermark to add to the social media image. Use a local file name$wgWikiSeoSocialImageIcon = LocalFile.jpg;
$wgWikiSeoSocialImageWidthWidth of the social media image$wgWikiSeoSocialImageWidth = 1200;
$wgWikiSeoSocialImageHeightHeight of the social media image$wgWikiSeoSocialImageHeight = 620;
$wgWikiSeoSocialImageTextColorColor of the text on the social image$wgWikiSeoSocialImageTextColor = #fff;
$wgWikiSeoSocialImageShowAuthorShow the author of the current page revision$wgWikiSeoSocialImageShowAuthor = true;
$wgWikiSeoSocialImageShowLogoShow the Wiki logo in the top right corner$wgWikiSeoSocialImageShowLogo = true;
$wgWikiSeoSocialImageBackgroundColorDefault background color if no page image is found$wgWikiSeoSocialImageBackgroundColor = '#ff00ff';

Migrating from v1.2.2 to to v2.x

Removed tags

  • DC.date.created
  • DC.date.issued
  • google
  • name
  • og:title (automatically set)
  • og:url (automatically set)
  • twitter:card (automatically set)
  • twitter:creator
  • twitter:domain
  • article:modified_time / og:updated_time (automatically set)

Removed aliases

  • metakeywords / metak
use keywords instead
  • metadescription / metad
use description instead
  • titlemode / title mode
use title_mode instead

Changed argument names

  • article:author -> author
  • article:section -> section
  • article:tag -> keywords
  • article:published_time -> published_time
  • og:image / twitter:image:src -> image
  • og:image:width -> image_width
  • og:image:height -> image_height
  • og:locale -> locale
  • og:site_name -> site_name
  • og:title -> title
  • og:type -> type
  • twitter:description -> description

Known issues

Extension:PageImages will add an og:image tag if an image is found on the page. If another image was set using WikiSEO, both og:image will be added to the page.

Further information:

Setting $wgPageImagesOpenGraph = false; disables PageImages setting any og:image* metatags.

Additionally you can set $wgWikiSeoOverwritePageImage = true; to overwrite the image set by PageImages with the one specified by WikiSEO.

Further details

This extension is not a drop-in replacement for the previous version of this extension from tinymighty/wiki-seo.

If you only want to override the display title on pages (not append words to it), you might also look at the DISPLAYTITLE tag in combination with the Manual:$wgAllowDisplayTitle and Manual:$wgRestrictDisplayTitle settings.

schema.org

The SchemaOrg generator will set a SearchAction property based on Special:Search.[4]

The properties publisher and author will be set to Organization with the name set to the content of $wgSitename.

dateModified will be automatically set by fetching the latest revision timestamp. If no published_time is set, datePublished will be set to the latest revision timestamp.

OpenGraph

article:modified_time will be automatically set by fetching the latest revision timestamp. If no published_time is set, article:published_time will be set to the latest revision timestamp.

Integration

WikiSEO will use descriptions provided by Extension:Description2.

Notes

See also

This article is issued from Mediawiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.