织梦搜索页面模板怎么修改

search.htm 搜索结果 站内搜索

搜索页面模板文件位置

织梦的站内搜索页面对应模板文件 templets/你的风格/search.htm。如果该文件不存在,织梦会回退到 templets/default/search.htm。访问 URL 通常是:

https://www.example.com/search.php?q=关键词
https://www.example.com/plus/search.php?q=关键词

搜索效果参考

核心标签:dede:list

搜索页用 {dede:list} 输出搜索结果,注意这里不是 arclist

{dede:list pagesize='10'}
  <li class="result-item">
    <a href="[field:arcurl/]" class="title">[field:title/]</a>
    <p class="snippet">[field:description function="cn_substr(@me,180)"/]</p>
    <span class="meta">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
  </li>
{/dede:list}

显示搜索关键词

{dede:global name='keyword' function='RemoveXSS(@me)'/} 显示用户输入的关键词:

<h1>关于「{dede:global name='keyword' function='RemoveXSS(@me)'/}」的搜索结果</h1>
<p>共找到 {dede:global name='totalnum'/} 条结果</p>

关键词高亮

搜索结果中让关键词高亮显示,需用 function 替换:

[field:title function="preg_replace('/('.str_replace(' ','|',$GLOBALS['keyword']).')/i',
    '<span class=\"hl\">\\\\1</span>', @me)"/]

或简化版(仅单个关键词):

[field:title runphp='yes']
$kw=$GLOBALS['keyword'];
@me=preg_replace("/($kw)/i", '<mark>$1</mark>', @me);
[/field:title]

CSS 高亮样式:

.hl, mark{
  background:#fde68a;color:#7c2d12;padding:0 2px;
}

搜索分页

搜索结果分页用 {dede:pagelist}

<div class="pagination">
  {dede:pagelist listsize='3' listitem='index,pre,pageno,next,end'/}
</div>

无结果时的友好提示

当搜索结果为空时,给出推荐内容或搜索建议,提升体验:

{dede:list pagesize='10'}
  ...正常结果...
{/dede:list}

{dede:php}
if($GLOBALS['totalnum']==0){
    echo '<div class="no-result">
            <p>没有找到「'.$GLOBALS['keyword'].'」相关的内容</p>
            <p>试试:<a href="/search.php?q=模板">模板</a>
                     <a href="/search.php?q=SEO">SEO</a></p>
          </div>';
}
{/dede:php}

搜索框美化

<form action="/search.php" method="get" class="search-form">
  <input type="text" name="q" placeholder="输入关键词..."
         value="{dede:global name='keyword' function='RemoveXSS(@me)'/}">
  <button type="submit">搜索</button>
  <input type="hidden" name="searchtype" value="titlekeyword">
</form>

searchtype 取值:

注意:搜索关键词必须用 RemoveXSShtmlspecialchars 转义,否则会被注入 XSS 代码,造成安全风险。

限定搜索栏目

搜索框加隐藏字段限定栏目:

<input type="hidden" name="typeid" value="5">
<!-- 或让用户选择 -->
<select name="typeid">
  <option value="0">全站</option>
  <option value="1">新闻</option>
  <option value="2">产品</option>
</select>

搜索结果 SEO 优化

搜索页伪静态

nginx 规则:

rewrite ^/search/(.+)\.html$ /search.php?q=$1 last;

搜索表单 action 改为 /search/,提交后 URL 形如 /search/织梦模板.html

常见问题

搜索结果为空但有相关文章

1) 文章未生成 HTML;2) 关键词分词问题;3) searchtype 设置过严。

搜索中文乱码

检查模板和数据库编码是否 UTF-8;URL 编码用 urlencode

搜索很慢

dede_archives 表的 titlekeywords 字段加 FULLTEXT 索引,或使用 Elasticsearch 替代。

行动建议

立刻打开你的搜索页,搜索一个常见词看看效果。如果还是织梦默认样式,花半小时美化一下,加上高亮和分页。在 robots.txt 中屏蔽 /search.php 防止低质页被收录。搜索框是用户主动表达需求的地方,把这块体验做好,用户停留时长和 PV 都会有明显提升,也是发现长尾词机会的重要入口。