热在 <%= search_url 中添加 { 或 } 符号到头部
Hot to add { or } symbols in <%= search_url into the head
在我们的结构化数据区域(在 <head>
中)我们有这个
"potentialAction": {
"@type": "SearchAction",
"target": "<%= search_url(search: {q: "{search_term_string}" }) %>",
"query-input": "required name=search_term_string"
}
观看"target"。它以这种方式向我显示 link
它告诉我
https://www.mywebsite.com/search?utf8=%E2%9C%93&search%5Bq%5D=%7Bsearch_term_string%7D
它不显示 { 或 },但显示 %7B 和 %7D
怎么怎么解决?
我已经尝试使用
进行修复
"{search_term_string}".html_safe
或
"{search_term_string}".html_safe
或
%({search_term_string})
或
%({search_term_string}).html_safe
但什么都没有
您需要生成 URL 的模板(不一定是有效的 URL 本身,而是可用于生成有效的 URL 的模板)。您确切地知道您需要更换什么,您可以非常确定它只会发生在一个地方,并且您知道一切都是安全的,因为您是一切的控制者并且 GoogleBot 知道它在寻找什么(大概)。
我会继续手动修补编码:
search_url(search: { q: "{search_term_string}" }).sub('%7Bsearch_term_string%7D', '{search_term_string}')
如果您认为该模式会多次出现(这种可能性很小),请使用 gsub
而不是 sub
。
你也可以更明确地说明你在做什么:
.sub('%7Bsearch_term_string%7D') { |encoded| URI.decode(encoded) }
或者把它全部放在一个助手中(比如 search_url_for_microdata
),这样你就可以给未来的自己留下一张便条,告诉你为什么要这样做:
# Untangle URL encoding issues with json+ld microdata for GoogleBot.
def search_url_for_microdata
search_url(search: { q: '{search_term_string}' })
.sub('%7Bsearch_term_string%7D') { |encoded| URI.decode(encoded) }
end
甚至:
# Untangle URL encoding issues with json+ld microdata for GoogleBot.
def search_url_for_microdata
decoded = '{search_term_string}'
encoded = URI.encode(decoded)
search_url(search: { q: decoded }).sub(encoded, decoded)
end
或:
DECODED = '{search_term_string}'
ENCODED = URI.encode(DECODED)
# Untangle URL encoding issues with application/ld+json microdata for GoogleBot.
def search_url_for_microdata
search_url(search: { q: DECODED }).sub(ENCODED, DECODED)
end
在我们的结构化数据区域(在 <head>
中)我们有这个
"potentialAction": {
"@type": "SearchAction",
"target": "<%= search_url(search: {q: "{search_term_string}" }) %>",
"query-input": "required name=search_term_string"
}
观看"target"。它以这种方式向我显示 link
它告诉我
https://www.mywebsite.com/search?utf8=%E2%9C%93&search%5Bq%5D=%7Bsearch_term_string%7D
它不显示 { 或 },但显示 %7B 和 %7D
怎么怎么解决?
我已经尝试使用
进行修复"{search_term_string}".html_safe
或
"{search_term_string}".html_safe
或
%({search_term_string})
或
%({search_term_string}).html_safe
但什么都没有
您需要生成 URL 的模板(不一定是有效的 URL 本身,而是可用于生成有效的 URL 的模板)。您确切地知道您需要更换什么,您可以非常确定它只会发生在一个地方,并且您知道一切都是安全的,因为您是一切的控制者并且 GoogleBot 知道它在寻找什么(大概)。
我会继续手动修补编码:
search_url(search: { q: "{search_term_string}" }).sub('%7Bsearch_term_string%7D', '{search_term_string}')
如果您认为该模式会多次出现(这种可能性很小),请使用 gsub
而不是 sub
。
你也可以更明确地说明你在做什么:
.sub('%7Bsearch_term_string%7D') { |encoded| URI.decode(encoded) }
或者把它全部放在一个助手中(比如 search_url_for_microdata
),这样你就可以给未来的自己留下一张便条,告诉你为什么要这样做:
# Untangle URL encoding issues with json+ld microdata for GoogleBot.
def search_url_for_microdata
search_url(search: { q: '{search_term_string}' })
.sub('%7Bsearch_term_string%7D') { |encoded| URI.decode(encoded) }
end
甚至:
# Untangle URL encoding issues with json+ld microdata for GoogleBot.
def search_url_for_microdata
decoded = '{search_term_string}'
encoded = URI.encode(decoded)
search_url(search: { q: decoded }).sub(encoded, decoded)
end
或:
DECODED = '{search_term_string}'
ENCODED = URI.encode(DECODED)
# Untangle URL encoding issues with application/ld+json microdata for GoogleBot.
def search_url_for_microdata
search_url(search: { q: DECODED }).sub(ENCODED, DECODED)
end