Project

General

Profile

Actions

Bug #86956

open

Typoscript meta tag field settings have no effect

Added by Christoph Sölder over 5 years ago. Updated about 3 years ago.

Status:
New
Priority:
Must have
Assignee:
-
Category:
SEO
Target version:
-
Start date:
2018-11-20
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
9
PHP Version:
7.2
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

When defining meta tags with typoscript for example

page {
    meta {
        author = {$page.meta.author}
        author {
             override.field = author
        }
    }
}

the override value is not rendered in the frontend if it is set in the backend.
The frontend alway shows the value set in {$page.meta.author}.

Similar if you define a meta tag that takes it's value directly from a database field e.g.

page {
    meta {
        author.field = author
    }
}

The tag is not rendered in the frontend.

Using `page.meta.author.replace=1` doesn't help either.

The only way i got the override to work is the following:

page.meta.author.override.field >
page.meta.author.override.data = DB:pages:{TSFE:id}:author
page.meta.author.override.data.insertData = 1

To me it seems like the parameter "field" isn't working as expected.

Actions #1

Updated by Richard Haeser over 5 years ago

  • Status changed from New to Accepted

I can confirm this issue

Actions #2

Updated by Vasyl Mosiychuk over 5 years ago

I can confirm this issue too...

My TYPO3 9.5.1, PHP 7.2

page {
    meta {
        author = {$page.meta.author}
        author {
             override.field = author
        }
        keywords = {$page.meta.keywords}
        keywords {
             override.field = keywords
        }
    }
}

...and it is not working

page {
    meta {
        author.data = author
        keywords.data = keywords
    }
}
page {
    meta {
        author.data = levelfield:-1, author, slide
        keywords.data = levelfield:-1, keywords, slide
    }
}

...very strange but it is working

page {
    meta {
        description = {$page.meta.description}
        description {
             override.field = description
        }
    }
}

...and it is working

page {
    meta {
        keywords.data = page:keywords
        author.data = page:author
    }
}
Actions #3

Updated by Vasyl Mosiychuk over 5 years ago

Tested on the TYPO3 v. 9.5.1 with Bootstrap Package 10.0.4 - working

page {
    meta {
        keywords = {$page.meta.keywords}
        keywords {
            stdWrap {
                override {
                    data = page:keywords
                }
            }
        }
        author = {$page.meta.author}
        author {
            stdWrap {
                override {
                    data = page:author
                }
            }
        }
    }
}

Actions #4

Updated by Riccardo De Contardi over 5 years ago

These are my findings with TYPO3 9.5.2 (latest master)
- I created three constants
- on one page, I set the values of the fields author, keyword, description

These three lines are always present on each test

page.meta.author = {$page.meta.author} >>> constant is shown
page.meta.keywords = {$page.meta.keywords} >>> constant is shown
page.meta.description = {$page.meta.description} >>> Note: in this situation the description field of the page properties will be taken; if not empty!

For each test, I added the following three lines (each time a different set of lines)

Test 1 - added:

page.meta.author.override.field = author >>> Does not work; the constant is shown
page.meta.keywords.override.field = keywords >>> Does not work; the constant is shown
page.meta.description.override.field = description >>>Works the field value is taken; but see the previous Note!

Test 2 - added:

@page.meta.author.data = author >>> Does not work; the tag is missing
@page.meta.keywords.data = keywords >>> Does not work; the tag is missing
@page.meta.description.data = description >>> Works, but see the previous Note!

Test 4 - added:

page.meta.author.data = page:author >>> Works the field value is taken; the tag is missing if empty
page.meta.keywords.data = page:keywords >>> Works the field value is taken; the tag is missing if empty
page.meta.description.data = page:description >>> Works the field value is taken; the tag is missing if empty

Test 5 - added:

page.meta.author.data = levelfield:-1, author, slide >>> Works the field value is taken; also the slide works
page.meta.keywords.data = levelfield:-1, keywords, slide >>> Works the field value is taken; also the slide works
page.meta.description.data = levelfield:-1, description, slide >>> Works the field value is taken; also the slide works

NOTE 2: in Install Tool, set ['FE']['addRootLineFields'] => 'author,description,keywords'

Test 6 - added:

page.meta.author.override.data = page:author >>> Works the field value is taken; constant is shown if empty
page.meta.keywords.override.data = page:keywords >>> Works the field value is taken; constant is shown if empty
page.meta.description.override.data = page:description >>> Works the field value is taken; constant is shown if empty

Test 7 - added:

page.meta.author.stdWrap.override.data = page:author >>> Works the field value is taken; constant is shown if empty
page.meta.keywords.stdWrap.override.data = page:keywords >>> Works the field value is taken; constant is shown if empty
page.meta.description.stdWrap.override.data = page:description >>> Works the field value is taken; constant is shown if empty

Actions #5

Updated by Richard Haeser about 5 years ago

  • Status changed from Accepted to Needs Feedback

Can you check again? Can't reproduce anymore. (Also not on 9.5.1...)

Actions #6

Updated by Riccardo De Contardi about 5 years ago

@Richard Haeser I repeated the same tests with 9.5.4 and had slightly different results:

Test 1 -> same results
Test 2 -> one different result:
page.meta.description.data = description >>> Value from field is taken if not empty; Tag is missing if empty
Test 4 -> same results
Test 5 -> all different results:
page.meta.author.data = levelfield:-1, author, slide >>> Does not work; the tag is missing; also the slide works
page.meta.keywords.data = levelfield:-1, keywords, slide >>> Does not work; the tag is missing; also the slide works
page.meta.description.data = levelfield:-1, description, slide >>> Value from field is taken if not empty; Tag is missing if empty; also the slide works
Test 6 -> same results
Test 7 -> same results

I cleared the frontend cache before each test.

Actions #7

Updated by Benjamin Eyring about 5 years ago

This issue still seems active in 9.5.5

As a workaround we solved it like this:

1. Deactivate rendering of the seo tags:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\CMS\Frontend\Page\PageGenerator']['generateMetaTags'] = NULL;

2. Set the fields to slide=true:
$GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] = 'og_title,og_description,og_image,twitter_title,twitter_description,twitter_image,author,author_email';

3. Manually manage seo tags using TS:

70 = COA
70 { # OG:TITLE ###########################################
10 = TEXT
10 {
data = levelfield:-1, og_title, slide
noTrimWrap = |<meta property="og:title" content="|" />|
} # OG:TYPE ###########################################
20 = TEXT
20 {
value = website
noTrimWrap = |<meta property="og:type" content="|" />|
} # OG:URL #############################################
30 = TEXT
30 {
typolink {
parameter.data = tsfe:id
parameter.insertData = 1
useCacheHash = 1
addQueryString = 1
addQueryString.method = get
addQueryString.exclude = id
forceAbsoluteUrl = 1
returnLast = url
}
wrap = <meta property="og:url" content="|">
} # OG:DESCRIPTION ######################################
40 = TEXT
40 {
data = levelfield:-1, og_description, slide
stdWrap.wrap = <meta property="og:description" content="|" />
} # OG:IMAGE ############################################ # Adaption for news see below
50 = FILES
50 {
references {
data = levelfield:-1, og_image, slide
}
renderObj = IMG_RESOURCE
renderObj {
file.import.data = file:current:publicUrl
}
stdWrap.dataWrap = <meta property="og:image" content="{site:base}|" />
required = 1
}
}

TBD: Check, if these tags are set correctly for news detail pages.

Don't know if there is a better solution?

Actions #8

Updated by Riccardo De Contardi almost 5 years ago

I repeated my tests (see comment 4) on 9.5.8 with a more rich scenario:

- I created three constants:

page.meta.author = AUTORE DA COSTANTE
page.meta.keywords = KEYWORD DA COSTANTE
page.meta.description = DESCRIPTION DA COSTANTE

- I created four pages

Page A
Author field: filled with AUTORE DA PAGINA
Keyword field: filled with KEYWORD DA PAGINA
Description field: filled with DESCRIPTION DA PAGINA

Page B
Author field: empty
Keyword field: empty
Description field: filled with DESCRIPTION DA PAGINA

Page C
Author field: filled with AUTORE DA PAGINA
Keyword field: filled with KEYWORD DA PAGINA
Description field: empty

Page D
Author field: empty
Keyword field: empty
Description field: empty

So to sum up

Page A Page B Page C Page D
Author filled [empty] filled [empty]
Kewyord filled [empty] filled [empty]
Description filled filled [empty] [empty]

Note: for test 5 that involves the "slide" I created a subpage for each page; the fields on all the subpages are always empty;

on Install Tool I set ['FE']['addRootLineFields'] => 'author,description,keywords'

- for each test, the lines:

page.meta.author = {$page.meta.author} 
page.meta.keywords = {$page.meta.keywords} 
page.meta.description = {$page.meta.description}

are always present

- before each test, I cleared the cache

I sum up in the following table the results of all the tests;

legend:

for each cell of the table, I report the values taken for Author, Keywords and Description in this order;

"C" means that the value from the constants is taken; "P" means that the value from the page field is taken; "/" means that the tag is absent

Test Page A Page B Page C Page D
only
page.meta.author = {$page.meta.author} 
page.meta.keywords = {$page.meta.keywords} 
page.meta.description = {$page.meta.description}
C C P C C P C C C C C C
Added:
page.meta.author.override.field = author 
page.meta.keywords.override.field = keywords
page.meta.description.override.field = description
P P P C C P P P C C C C
Added:
page.meta.author.data = author
page.meta.keywords.data = keywords
page.meta.description.data = description
/ / P / / P / / / / / /
Added:
page.meta.author.data = page:author 
page.meta.keywords.data = page:keywords 
page.meta.description.data = page:description
P P P / / P P P / / / /
Added:
page.meta.author.data = levelfield:-1, author, slide 
page.meta.keywords.data = levelfield:-1, keywords, slide
page.meta.description.data = levelfield:-1, description, slide 
P P P / / P P P / / / /
same configuration of the previous line; checked the subpage of each page P P P / / P P P / / / /
Added:
page.meta.author.override.data = page:author 
page.meta.keywords.override.data = page:keywords
page.meta.description.override.data = page:description 
P P P C C P P P C C C C
Added:
page.meta.author.stdWrap.override.data = page:author 
page.meta.keywords.stdWrap.override.data = page:keywords 
page.meta.description.stdWrap.override.data = page:description 
P P P C C P P P C C C C

From a first glance, the test with

page.meta.author.data = author
page.meta.keywords.data = keywords
page.meta.description.data = description

seems to present the most faulty behavior;

Actions #9

Updated by Richard Haeser over 4 years ago

  • Status changed from Needs Feedback to New
Actions #10

Updated by Benni Mack about 4 years ago

  • Status changed from New to Needs Feedback

Just to clear this up:

page.meta.author.data = author
page.meta.keywords.data = keywords
page.meta.description.data = description

This would/should never ever work:
https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/DataTypes/Index.html#gettext

When using .data - you need to have "page:author" or "field:author" (depending on the current data, which is correct in the case of page.meta).

Looking at your examples, Riccardo, the rest of the results look fine IMHO.

Actions #11

Updated by Riccardo De Contardi about 4 years ago

Hello Benni, I report here again the results for each test for clarity, discarding the one with incorrect syntax:

1) This one still looks faulty , the value of description from the page is always taken even if I have just defined the constants.
Why only description behaves like that? Is it correct?

Test Page A Page B Page C Page D
only
page.meta.author = {$page.meta.author} 
page.meta.keywords = {$page.meta.keywords} 
page.meta.description = {$page.meta.description}
C C P C C P C C C C C C

2) These ones look correct: the override with the values from page is always done when present - and they're totally equivalent

Test Page A Page B Page C Page D
Added:
page.meta.author.override.field = author 
page.meta.keywords.override.field = keywords
page.meta.description.override.field = description
P P P C C P P P C C C C
Added:
page.meta.author.override.data = page:author 
page.meta.keywords.override.data = page:keywords
page.meta.description.override.data = page:description 
P P P C C P P P C C C C
Added:
page.meta.author.stdWrap.override.data = page:author 
page.meta.keywords.stdWrap.override.data = page:keywords 
page.meta.description.stdWrap.override.data = page:description 
P P P C C P P P C C C C
3) This looks correct,too: only the values from the page are considered
Added:
page.meta.author.data = page:author 
page.meta.keywords.data = page:keywords 
page.meta.description.data = page:description
P P P / / P P P / / / /

4) Last but not the least, this looks good, too, it is the same as the previous one, plus the "slide" is correctly considered

Test Page A Page B Page C Page D
Added:
page.meta.author.data = levelfield:-1, author, slide 
page.meta.keywords.data = levelfield:-1, keywords, slide
page.meta.description.data = levelfield:-1, description, slide 
P P P / / P P P / / / /
same configuration of the previous line; checked the subpage of each page P P P / / P P P / / / /
Actions #12

Updated by Benni Mack about 4 years ago

Perfect, Riccardo!

With your information I spotted the issue, which resides in the EXT:seo MetaTagGenerator where the "description" field is always taken from the page.

Actions #13

Updated by Benni Mack about 4 years ago

  • Status changed from Needs Feedback to Accepted
Actions #14

Updated by Thomas Stranz over 3 years ago

page.meta.description.replace = 1

worked for me

Actions #15

Updated by Richard Haeser over 3 years ago

For the description field it is right you need the .replace parameter. So this is expected behaviour. If you want to override the settings with TypoScript you have to use that parameter.

If I'm right we can close this issue.

Actions #16

Updated by Richard Haeser over 3 years ago

  • Status changed from Accepted to Needs Feedback
Actions #17

Updated by Riccardo De Contardi over 3 years ago

@Thomas Stranz, @Richard Haeser

I am trying unluckily without success to find where in the documentation it is stated that page.description is a special case that needs the replace function; (looking at https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Setup/Page/Index.html?highlight=meta#meta. Is there some other place where to search?)

Actions #18

Updated by Richard Haeser about 3 years ago

Riccardo, on the link you have given, in the description of meta you find:

replace If set to 1, the tag will replace the one set earlier by a plugin. If set to 0 (default), the meta tag generated by the plugin will be used. If there is none yet, the one from TypoScript is set.

If that is not sufficient, maybe we have to update the documentation a little bit

Actions #19

Updated by Riccardo De Contardi about 3 years ago

@Richard Haeser

Aw... it is embarrassing I haven't seen it :O

If that is not sufficient, maybe we have to update the documentation a little bit

I would suggest to add at least an example to make it more evident, and thanks again for finding it.

Actions #20

Updated by Richard Haeser about 3 years ago

  • Status changed from Needs Feedback to New
Actions

Also available in: Atom PDF