![]() Release status: stable | |
---|---|
Implementation | Parser function |
Description | Allows to add common meta elements as part of Search Engine Optimisation (SEO) |
Author(s) | Octfxtalk |
Maintainer(s) | Octfx |
Latest version | 2.7.0 (2023-06-29) |
MediaWiki | 1.39+ |
PHP | 7.4+ |
Composer | octfx/wiki-seo |
License | GNU General Public License 2.0 or later |
Download | |
| |
Translate the WikiSEO extension if it is available at translatewiki.net | |
Issues | Open tasks ·Report a bug |
TheWikiSEO extension allows you to replace, append or prepend the HTML title tag content.It also allows you to add common SEO (Search Engine Optimisation) meta elements such as "keywords" and "description".
A workingjob queue is absolutely required for this extension to function.
WikiSEO
folder to yourextensions/
directory.cdextensions/gitclonehttps://gerrit.wikimedia.org/r/mediawiki/extensions/WikiSEO
wfLoadExtension('WikiSEO');
The extension can be used via the{{#seo}}
parser function or in Lua modules by usingmw.ext.seo.set()
.It accepts the following named parameters in any order.
Name | Default | Description | Example |
---|---|---|---|
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}} |
title_mode | replace | Set to append, prepend, or replace (default) to define how the title will be amended. Further examples can be foundhere. | {{#seo:|title=This replaces the Title of the Page|title_mode=replace}} |
title_separator | - | The separator in casetitle_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=<<}} |
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}} |
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...}} |
Name | Default | Description | Example |
---|---|---|---|
robots | (empty) | Controls the behaviour of search engine crawling and indexing | {{#seo:|robots=noindex, nofollow}} |
googlebot | (empty) | Controls the behaviour of the google crawler | {{#seo:|googlebot=noindex, nofollow}} |
hreflang_xx-xx | (empty) | Adds<linkrel="alternate"href="url"hreflang="xx-xx"> elements | {{#seo:|hreflang_de-de=https://example.com}} |
Name | Default | Description | Example |
---|---|---|---|
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}} |
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 andimage_height will then have to be set manually.Ifno parameter is set, the extension will use $wgLogo as a fallback or the local file set through$wgWikiSeoDefaultImage . | {{#seo:|image=Local_File.png}} |
image_width | (empty) | The image width in px. (Automatically set if an image name is set inimage ) | {{#seo:|image_width=420}} |
image_height | (empty) | The image height in px. (Automatically set if an image name is set inimage ) | {{#seo:|image_height=69}} |
image_alt | (empty) | A short sentence describing the image | {{#seo:|image_alt=A picture showing an orange cat.}} |
locale | (empty) | The locale these tags are marked up in. Of the format language_TERRITORY. | {{#seo:|locale=en-US}} |
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}} |
Seetype=article
.[1]
Name | Default | Description | Example |
---|---|---|---|
author | (empty) | Writers of the article. | {{#seo:|author=Jon Doe}} |
section | (empty) | A high-level section name. E.g. Technology | {{#seo:|section=Technology}} |
published_time | (empty) | When the article was first published. ISO 8601 Format. | {{#seo:|published_time=2012-01-25}} |
See OpenGraph Tags.[2]
Name | Default | Description | Example |
---|---|---|---|
twitter_site | (empty) | If you didnot 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 beignored. | {{#seo:|twitter_site=MediaWiki}} |
See Schema.org.[3]
Name | Default | Description | Example |
---|---|---|---|
citation_type | ScholarlyArticle | Used in @graph @type | {{#seo:|citation_type=MedicalScholarlyArticle}} |
citation_name | (empty) | Name of the Publication | {{#seo:|citation_name=Cataloging & Classification Quarterly}} |
citation_headline | (empty) | Headline of the article. | {{#seo:|citation_headline=Works in Cataloging}} |
citation_date_published | (empty) | Date of first broadcast/publication. | {{#seo:|citation_date_published=2012-01-01}} |
citation_date_created | (empty) | The date on which theCreativeWork was created or the item was added to aDataFeed . | {{#seo:|citation_date_created=2012-01-01}} |
citation_page_start | (empty) | The page on which the work starts; for example "135" or "xiii". | {{#seo:|citation_page_start=135}} |
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_author | (empty) | One or more authors separated by; | {{#seo:|citation_author=Doe, John; Bar, Foo}} |
citation_publisher | (empty) | Name of the publisher | {{#seo:|citation_journal_title=Elsevir}} |
citation_license | (empty) | A license document that applies to this content, typically indicated by URL. | {{#seo:|citation_license=link}} |
citation_volume | (empty) | Volume number | {{#seo:|citation_volume=50}} |
keywords | (empty) | Article Keywords(*) | {{#seo:|citation_keywords=Keyword a; Keyword b; ...}} |
description | (empty) | A description of the item(*) | {{#seo:|description=An article about cataloging}} |
(*) these parameters are supported by all generators.
Do note that the Citation generator isnot activated by default!To activate the generator add the following snippet toLocalSettings.php
:
$wgMetadataGenerators[] = "Citation";
{{#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}}
If you need to include variables or templates you should use the parser function to ensure they are properly parsed.This allows you to useCargo orSemantic MediaWiki, withPage 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}}
-- Module:SEOlocalseo={}--[[argTable format:{ title_mode = 'append', title = 'Example Seo Wiki', keywords = 'WikiSEO, SEO, MediaWiki', -- ...}]]--functionseo.set(argTable)mw.ext.seo.set(argTable)endfunctionseo.setStatic()mw.ext.seo.set{title_mode='append',title='Example Seo Wiki',keywords='WikiSEO, SEO, MediaWiki',}endreturnseo
The module would now be callable as{{#invoke:SEO|set|title=ExampleTitle|keywords=WikiSEO, SEO, MediaWiki}}
or{{#invoke:SEO|setStatic}}
.
{{#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:
<linkrel="alternate"href="https://example.de/page"hreflang="de-de"><linkrel="alternate"href="https://example.nl/page-nl"hreflang="nl-nl"><linkrel="alternate"href="https://website.com/"hreflang="en-us">
Example: Page with titleExample Page
{{#seo: |title_mode=append |title=Appended Title}}
HTML Title result:Example Page - Appended Title
{{#seo: |title_mode=prepend |title=Prepended Title}}
HTML Title result:Prepended Title - Example Page
{{#seo: |title_mode=prepend |title=Prepended Title |title_separator= >> }}
HTML Title result:Prepended Title >> Example Page
{{#seo: |title_mode=replace |title=Replaced Title}}
HTML Title result:Replaced Title
WikiSEO provides a maintenance script to generate descriptions for specified pages.This script requiresExtension:TextExtracts to be installed and active.The script will only generate descriptions for pages that don't have adescription
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 namespacephp maintenance/run.php ./extensions/WikiSEO/maintenance/GenerateDescription.php 0# Run only in main namespace and overwrite existing descriptionsphp maintenance/run.php ./extensions/WikiSEO/maintenance/GenerateDescription.php --force 0# Run in namespace 1234, overwrite descriptions and remove dangling sentencesphp maintenance/run.php ./extensions/WikiSEO/maintenance/GenerateDescription.php --force --cleanSentence 1234
The following variables are in use by this extension.
Variable | Description | Usage |
---|---|---|
$wgGoogleSiteVerificationKey | Setting this variable will add a<meta name="google-site-verification" content="CODE"> tag to every page. | $wgGoogleSiteVerificationKey = 'CODE'; |
$wgBingSiteVerificationKey | Setting this variable will add a<meta name="msvalidate.01" content="CODE"> tag to every page. | $wgBingSiteVerificationKey= 'CODE'; |
$wgFacebookAppID | Setting this variable will add a<meta property="fb:app_id" content="ID"> tag to every page. | $wgFacebookAppID= 'App_ID'; |
$wgFacebookAdmins | Setting this variable will add a<meta property="fb:admins" content="ID1,ID2,..."> tag to every page. | $wgFacebookAdmins= 'ID1,ID2,...'; |
$wgYandexSiteVerificationKey | Setting this variable will add a<meta name="yandex-verification" content="CODE"> tag to every page. | $wgYandexSiteVerificationKey= 'CODE'; |
$wgAlexaSiteVerificationKey | Setting this variable will add a<meta name="alexaVerifyID" content="CODE"> tag to every page. | $wgAlexaSiteVerificationKey= 'CODE'; |
$wgPinterestSiteVerificationKey | Setting this variable will add a<meta name="p:domain_verify" content="CODE"> tag to every page. | $wgPinterestSiteVerificationKey= 'CODE'; |
$wgNortonSiteVerificationKey | Setting this variable will add a<meta name="norton-safeweb-site-verification" content="CODE"> tag to every page. | $wgNortonSiteVerificationKey= 'CODE'; |
$wgNaverSiteVerificationKey | Setting 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<linkrel="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 fromExtension:TextExtracts will be requested.A description will only be set, if the page is edited and saved.Alternatively the maintenance scriptGenerateDescription
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.
Variable | Description | Usage |
---|---|---|
$wgWikiSeoEnableSocialImages | Generate dedicated social media icons for pages | $wgWikiSeoEnableSocialImages = true; |
$wgWikiSeoSocialImageIcon | The icon/watermark to add to the social media image. Use a local file name | $wgWikiSeoSocialImageIcon = LocalFile.jpg; |
$wgWikiSeoSocialImageWidth | Width of the social media image | $wgWikiSeoSocialImageWidth = 1200; |
$wgWikiSeoSocialImageHeight | Height of the social media image | $wgWikiSeoSocialImageHeight = 620; |
$wgWikiSeoSocialImageTextColor | Color of the text on the social image | $wgWikiSeoSocialImageTextColor = '#fff'; |
$wgWikiSeoSocialImageShowAuthor | Show the author of the current page revision | $wgWikiSeoSocialImageShowAuthor = true; |
$wgWikiSeoSocialImageShowLogo | Show the Wiki logo in the top right corner | $wgWikiSeoSocialImageShowLogo = true; |
$wgWikiSeoSocialImageBackgroundColor | Default background color if no page image is found | $wgWikiSeoSocialImageBackgroundColor = '#ff00ff'; |
Extension:PageImages will add anog:image
tag if an image is found on the page. If another image was set using WikiSEO, bothog:image
will be added to the page.
Further information:
Setting$wgPageImagesOpenGraph = false;
disables PageImages setting anyog:image*
meta tags.
Additionally you can set$wgWikiSeoOverwritePageImage = true;
to overwrite the image set by PageImages with the one specified by WikiSEO.
This extension isnot a drop-in replacement for the previous version of this extension fromtinymighty/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 theManual:$wgAllowDisplayTitle andManual:$wgRestrictDisplayTitle settings.
Note that this extension stores relevant properties in thepage_props table.Its parser hook persists previous properties when invoked since commit78245b3 (released in v2.6.6).This enables administrators to set these properties manually with other tools likeExtension:PageProperties.On the other hand removed parameters from parser function call will persist in the page.These outdated properties can be purged by temporarily removing the magic words or disabling the extension, then reparsing the page.
TheSchemaOrg
generator will set a SearchAction property based onSpecial:Search.[4]
The properties publisher and author will be set toOrganization
with the name set to the content of$wgSitename
.
dateModified
will be automatically set by fetching the latest revision timestamp.If nopublished_time
is set,datePublished
will be set to the latest revision timestamp.
article:modified_time
will be automatically set by fetching the latest revision timestamp.If nopublished_time
is set,article:published_time
will be set to the latest revision timestamp.
WikiSEO will use descriptions provided byExtension:Description2.
![]() | This extension is included in the following wiki farms/hosts and/or packages:This is not an authoritative list.Some wiki farms/hosts and/or packages may contain this extension even if they are not listed here.Always check with your wiki farms/hosts or bundle to confirm. |